我讨厌distutils(我猜he is the evil who does this)的一点是它改变了shebang线。换句话说,越是理性和环境的变化决定了圣经
#!/usr/bin/env python
神奇地转化为
#!/whatever/absolute/path/is/my/python
grok也可以看到这一点:我在virtualenv中使用grok project启动了我的项目,但是现在我不能再移动开发目录了,因为它在shebang指令中放置了绝对路径。
我这么问的原因有两个
- 我想移动它,因为我开始在一个目录(实验)中开发,现在我想移动到一个正确的路径,但我做不到。所以我创建了一个新的virtualenv和grokproject并复制了我的文件。这解决了问题,但让我对更合理的解决方案的好奇心没有得到满足。特别是,如果对virtualenv python解释器的引用是相对的,那么问题本来就不会出现。您知道virtualenv的布局,并且可以很容易地引用virtualenv python。
- 第二个原因是,我希望能够将virtualenv scp到另一台计算机上,并在那里运行而不会遇到麻烦。这是不可能的,如果你有硬编码的路径。
Tags:
当然,您可以移动开发目录。Distutils会更改运行python时应使用的python路径。当你运行建筑的时候,它在运行。移动并重新运行引导程序和构建。完成!
Distutils更改用于运行Distutils的Python的路径。如果没有,那么您可能最终会在一个python版本中安装一个库,但是当您尝试运行该脚本时,它将失败,因为它将与另一个没有库的python版本一起运行。
这不是疯狂,事实上这是唯一理智的方法。
更新: 如果你知道你在做什么,你可以这样做:
不过,请确保首先清除生成目录。:)
我没有办法解决你的问题,但我确实看到了当前distutils行为的一些基本原理。
#!/usr/bin/env python
执行系统的默认Python版本。只要你的代码与上述版本兼容就可以了。当默认版本被更新(比如从2.5更新到3)时,您的代码或其他引用/usr/bin/env
的Python代码可能会停止工作,即使仍然安装了旧的Python版本。因此,“硬编码”到适当的python解释器的路径是有意义的。编辑:您断言指定
python2.4
或类似方法可以解决此问题是正确的。编辑2:当同一个Python版本的多个安装出现时,事情并不像下面的注释中指出的那样清楚。
Distutils将自动将shebang替换为用于执行setup.py的Python二进制文件的位置。要覆盖此行为,有两个选项:
选项1:手动
您可以将标志--executable=/path/to/my/python传递给setup.py。论点被接受。
示例:
选项2:自动
另一个选项是向setup.cfg添加一行。如果不使用setup.cfg,请在与setup.py相同的目录中创建它。Setup.py在启动时查找此项。此处指定的任何选项仍可以在命令行使用标志覆盖。
相关问题 更多 >
编程相关推荐