【问题标题】:Conda setuptools install changes shebangs to default python installConda setuptools install 将shebangs更改为默认python安装
【发布时间】:2017-01-08 09:28:02
【问题描述】:

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

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

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

我需要为我的 anaconda python 安装一个自定义包。它只能通过 setuptools 安装。它包括一个命令行可执行文件,顶部有以下 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

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

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

【问题讨论】:

    标签: python anaconda setuptools conda


    【解决方案1】:

    我终于弄清楚是什么导致了我在正确安装 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 进行讨论

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-10
      • 2012-02-25
      • 2012-07-05
      • 2021-02-24
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      相关资源
      最近更新 更多