如果我用 构建一个包python setup.py bdist_wheel
,生成的包会扩展 setup.py 中列出的脚本中的 shebangs,setup(scripts=["script/path"])
以使用我的 python 可执行文件的绝对路径#!/home/f483/dev/storj/storjnode/env/bin/python
。
这显然是一个问题,因为任何使用轮子的人都不会进行这种设置。我使用什么样的shebang似乎没有什么区别。
如果我用 构建一个包python setup.py bdist_wheel
,生成的包会扩展 setup.py 中列出的脚本中的 shebangs,setup(scripts=["script/path"])
以使用我的 python 可执行文件的绝对路径#!/home/f483/dev/storj/storjnode/env/bin/python
。
这显然是一个问题,因为任何使用轮子的人都不会进行这种设置。我使用什么样的shebang似乎没有什么区别。
我终于缩小了范围,发现了问题。
这里是重现问题和解决方案的确切步骤。
在 setup.py 中添加的脚本中使用有效的 shebang。就我而言#!/usr/bin/env python
使用 创建一个 virtualenvvirtualenv -p /usr/bin/python2 env
并使用 激活source env/bin/activate
。
将软件包安装python setup.py install
到 virtualenv。
用 构建轮子python setup.py bdist_wheel
。
问题是在步骤 3 中将包安装到 virtualenv。如果没有这样做,则 shebang 不会扩展。
这通常不应该发生。我建议:
升级 pip / wheel / setuptools 并检查它是否可能是一个错误。
重新检查当前的 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
会有一个无效/占位符 shbang #!python
,但在实际安装过程中,它会被更改为正确的 system/virtualenv 路径。
使用通用 shebang#!python
似乎可以解决这个问题。
编辑:这是不正确的!