Ste*_*ini 25 python distutils virtualenv
我讨厌distutils的一件事(我猜他是这样做的邪恶者)是它改变了shebang线.换句话说,更合理的环境变量决定了经文
#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)
神奇地转换成了
#!/whatever/absolute/path/is/my/python
Run Code Online (Sandbox Code Playgroud)
这也可以用grok看到:我在virtualenv中使用了grokproject来启动我的项目,但是现在我不能再将开发目录移动了,因为它在shebang指令中放置了绝对路径.
我之所以这样问是双重的
Len*_*bro 14
当然,您可以移动开发目录.Distutils会更改运行它时应运行的python路径.运行buildout时,它在Grok运行中.移动并重新运行引导程序和构建.完成!
Distutils改变了用于运行distutils的Python的路径.如果没有,那么你最终可能会在一个python版本中安装一个库,但是当你尝试运行脚本时它会失败,因为它会运行另一个没有库的python版本.
这不是疯狂,它实际上是唯一理智的方式.
更新:如果您知道自己在做什么,可以这样做:
/path/to/install/python setup.py build -e "/the/path/you/want/python" install
Run Code Online (Sandbox Code Playgroud)
确保首先清理构建目录.:)
jat*_*ism 10
Distutils会自动将shebang替换为用于执行setup.py的Python二进制文件的位置.要覆盖此行为,您有两个选择:
选项1:手动
您可以将标志--executable =/path /传递给/ my/python到setup.py.参数被接受.
例:
% python setup.py build --executable=/opt/local/bin/python -d
Run Code Online (Sandbox Code Playgroud)
选项2:自动
您的另一个选择是在setup.cfg中添加一行.如果您不使用setup.cfg,请在setup.py所在的目录中创建它.Setup.py在启动时查找此内容.此处指定的任何选项仍可在命令行中使用标志覆盖.
% cat setup.cfg
[build]
executable = /opt/local/bin/python -d
Run Code Online (Sandbox Code Playgroud)