Conda setuptools install 将 shebangs 更改为默认 python 安装

Conda setuptools install changes shebangs to default python install

我遇到一个问题,即通过 setuptools 安装到 python anaconda 的软件包将 shebangs 重写到错误的位置。

我已经安装了 python anaconda 和 setuptools 软件包。我已经验证 python 可执行文件指向 anaconda 可执行文件

grant@DevBox2:/opt/content-analysis$ which python
/opt/anaconda2/bin/python

我需要为我的 anaconda 安装自定义包 python。它只能通过安装工具安装。它包括一个命令行可执行文件,顶部带有以下 shebang:

#!/usr/bin/env python

使用以下命令安装包后:

sudo python setup.py install --prefix=/opt/anaconda2

可执行文件 (content_analysis) 出现在路径可到达的位置。但是顶部的 shebang 已替换为机器上默认 python 安装的硬编码位置。

grant@DevBox2:/opt/content-analysis$ which content_analysis
/opt/anaconda2/bin/content_analysis
grant@DevBox2:/opt/content-analysis$ sed -n 1,2p /opt/anaconda2/bin/content_analysis 
#!/usr/local/bin/python

我已阅读以下 post here 关于 setuptools 覆盖 shebang 的内容。 post 建议 $PATH 中第一个的 python 可执行文件应该 是 setuptools 用来替换 shebang 的可执行文件。然而,这对我来说似乎并非如此。

注意:我无法将 python 可执行文件硬编码到我的 python setup.py build 命令中。我需要一个部署解决方案,该解决方案可以在任何已安装 conda 作为 $PATH

中的第一个 python 的环境中运行

我终于弄清楚是什么导致我的所有问题都得到 python 并且依赖项已正确安装:

每当在可执行文件之前调用 sudo 时,在 Debian 中 $PATH 变量会自动更改为安全路径查找。这是一个演示:

grant@DevBox2:/opt/content-analysis$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

对比

grant@DevBox2:/opt/content-analysis$ sh
$ echo $PATH
/opt/anaconda2/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

因此,当在 sudo python setup.py 之前调用 sudo 时,安装将恢复为默认设置 python。

this post 讨论