如何防止 python wheel 扩展 shebang?

How to prevent python wheel from expanding shebang?

如果我使用 python setup.py bdist_wheel 构建一个包,生成的包会通过 setup(scripts=["script/path"]) 扩展 setup.py 中列出的脚本中的 shebang,以使用我的 python 的绝对路径] 可执行文件 #!/home/f483/dev/storj/storjnode/env/bin/python.

这显然是个问题,因为使用方向盘的任何人都不会进行该设置。我使用哪种 shebang 似乎没有什么区别。

使用通用 shebang #!python 似乎可以解决这个问题。

编辑:这是错误的!

这通常不应该发生。我建议:

  1. 正在升级 pip / wheel / setuptools 并检查它是否可能是一个错误。

  2. 重新检查当前的 shbang 是否在脚本中是通用的。例如#!/usr/bin/env python

这是我无法重现问题的方法:

paster --no-interactive test
mkdir test/scripts
echo -e "#!/usr/bin/env python\nprint('test')" > test/scripts/s.py
# add scripts/s.py to test/setup.py
cd test; python setup.py bdist_wheel

如果你解压那个轮子,s.py 会有一个 invalid/placeholder shbang #!python,但在实际安装过程中,它会被更改为正确的 system/virtualenv 路径。

我终于缩小了范围,找到了问题。

这里是重现问题的具体步骤和解决方案。

  1. 在 setup.py 中添加的脚本中使用有效的 shebang。就我而言 #!/usr/bin/env python

  2. 使用 virtualenv -p /usr/bin/python2 env 创建虚拟环境并使用 source env/bin/activate 激活。

  3. 将带有 python setup.py install 的软件包安装到 virtualenv。

  4. python setup.py bdist_wheel造轮子。

问题是在第 3 步中将包安装到 virtualenv。如果不这样做,shebang 将不会展开。