为什么`pyvenv`没有安装`python-config`?

时间:2017-02-03 09:29:25

标签: c++ python-3.x virtualenv python-config pyvenv

我在MacOS(10.11)下遇到过这种情况,但在各种Linux下也遇到了同样的问题。我安装了#34;官方" 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

换句话说,即使我激活了虚拟环境,系统默认的Python2 python-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安装相关联,还有另一种方法可以确定我应该使用哪些头文件和库?

1 个答案:

答案 0 :(得分:0)

嗯,一年之后,现在是时候回答我自己的问题了: - )

以下是python-config安装到virtualenv的{​​{1}}脚本。如果你使用${VENV}/bin,那么只需手动将其复制到此位置,直到此问题得到解决(据我所知,从{2011年开始bug report仍然没有修复)。

python3 -m venv ${VENV}