如何防止 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
似乎可以解决这个问题。
编辑:这是错误的!
这通常不应该发生。我建议:
正在升级 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
会有一个 invalid/placeholder shbang #!python
,但在实际安装过程中,它会被更改为正确的 system/virtualenv 路径。
我终于缩小了范围,找到了问题。
这里是重现问题的具体步骤和解决方案。
在 setup.py 中添加的脚本中使用有效的 shebang。就我而言 #!/usr/bin/env python
使用 virtualenv -p /usr/bin/python2 env
创建虚拟环境并使用 source env/bin/activate
激活。
将带有 python setup.py install
的软件包安装到 virtualenv。
用python setup.py bdist_wheel
造轮子。
问题是在第 3 步中将包安装到 virtualenv。如果不这样做,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
似乎可以解决这个问题。
编辑:这是错误的!
这通常不应该发生。我建议:
正在升级 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
会有一个 invalid/placeholder shbang #!python
,但在实际安装过程中,它会被更改为正确的 system/virtualenv 路径。
我终于缩小了范围,找到了问题。
这里是重现问题的具体步骤和解决方案。
在 setup.py 中添加的脚本中使用有效的 shebang。就我而言
#!/usr/bin/env python
使用
virtualenv -p /usr/bin/python2 env
创建虚拟环境并使用source env/bin/activate
激活。将带有
python setup.py install
的软件包安装到 virtualenv。用
python setup.py bdist_wheel
造轮子。
问题是在第 3 步中将包安装到 virtualenv。如果不这样做,shebang 将不会展开。