我在 MacOS (10.11) 下遇到过这个问题,但在各种 Linux 下也遇到了同样的问题。我安装了“官方”Python3 包,它进入/Library/Frameworks/Python.framework/Versions/3.4
. (注意:下面的示例使用 Python 3.4,但问题仍然存在于 3.5 中。由于缺乏管理员权限,我无法访问具有 Python 3.6 的机器,如果问题已在 3.6 中解决。)
我需要虚拟环境,并且我需要python-config
脚本来确定 Python3 使用哪些库,因为我的项目结合了 Python 和 C++ 代码。
如果我用 设置虚拟环境virtualenv
,一切都很好:
$ which virtualenv
/Library/Frameworks/Python.framework/Versions/3.4/bin/virtualenv
$ virtualenv --python=$(which python3) vienv
Running virtualenv with interpreter /Library/Frameworks/Python.framework/Versions/3.4/bin/python3
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.4'
[...blabla...]
Installing setuptools, pip, wheel...done.
$ source vienv/bin/activate
(vienv) $ which python-config
/Users/XXXXX/DEV/STANDALONE/misc/python/vienv/bin/python-config
(vienv) $ python-config --libs
-lpython3.4m -ldl -framework CoreFoundation
但是,pyvenv
忘记python-config
在虚拟环境中设置:
$which pyvenv
/Library/Frameworks/Python.framework/Versions/3.4/bin/pyvenv
$ pyvenv pe
$ source pe/bin/activate
(pe) $ which python-config
/usr/bin/python-config # !!! Here's the problem !!!
(pe) $ python-config --libs
-lpython2.7 -ldl -framework CoreFoundation
换句话说,即使我激活了虚拟环境,系统默认的 Python2python-config
仍然存在。PATH
现在你可以说:有什么问题?使用virtualenv
并完成它。但是,virtualenv
需要额外安装pip
,这需要我并不总是拥有的管理员权限。 pyvenv
,OTOH,随Python3一起提供,或者至少这是我的理解。
你也可以说:你为什么不直接安装python-config
在你的虚拟环境中使用pip
?原因如下:
(pe) $ pip install python-config
Requirement already satisfied (use --upgrade to upgrade): python-config in ./pe/lib/python3.4/site-packages
Cleaning up...
是的,包在那里,但是脚本本身没有安装到bin
虚拟环境的子目录中。
摘要:我想配置我的项目,使其只能使用 Python3 标准模块/工具进行安装,并且它不依赖于额外的东西,例如virtualenv
. 而且我不想纠缠系统管理员:-)
问题:是否有解决方法可以正确pyvenv
安装python-config
?或者:如果我将我的 C++ 代码与虚拟环境中的特定 Python3 安装链接起来,是否有另一种方法来确定我应该使用哪些头文件和库?