CentOS7下Python3.6虚拟环境添加Python头文件的方法
问题描述
在CentOS7上使用Python3.6创建虚拟环境时遇到以下问题:
用virtualenv创建的情况
执行步骤:
sudo python3.6 -m pip install virtualenv python3.6 -m virtualenv -p /usr/bin/python3.6 venv source venv/bin/activate
生成的虚拟环境目录结构:
bin lib lib64
pyvenv.cfg内容:
home = /usr implementation = CPython version_info = 3.6.8.final.0 virtualenv = 20.14.0 include-system-site-packages = true base-prefix = /usr base-exec-prefix = /usr base-executable = /usr/bin/python3.6
按预期应存在对应系统路径/usr/include/python3.6m/的include目录,但实际缺失。手动创建软链接后,编译依赖Python头文件的C++项目仍报错:
pyconfig.h: No such file or directory
用venv创建的情况
执行步骤:
python3.6 -m venv new_venv
目录结构符合预期,但include目录为空,问题依旧。
解决方法
1. 安装Python3.6开发包
CentOS7默认可能未安装Python3.6的开发组件,先执行:
sudo yum install python36-devel
这会确保系统路径/usr/include/python3.6m/下存在完整头文件(包括pyconfig.h)。
2. 同步头文件到虚拟环境include目录
系统安装开发包后,将系统头文件软链接到虚拟环境的include目录:
# 针对virtualenv创建的venv mkdir -p venv/include ln -s /usr/include/python3.6m/* venv/include/ # 针对venv创建的new_venv ln -s /usr/include/python3.6m/* new_venv/include/
3. 编译时指定头文件路径(临时方案)
若不想修改虚拟环境,编译C++项目时通过CFLAGS指定头文件路径:
CFLAGS="-I/usr/include/python3.6m" make
如果用CMake构建,可在CMakeLists.txt中添加:
include_directories(/usr/include/python3.6m)
内容的提问来源于stack exchange,提问作者cogito
相关产品推荐
相关产品推荐

