Conda setuptools install изменяет shebangs на установку python по умолчанию

У меня проблема, когда пакеты, установленные с помощью setuptools для python anaconda, имеют переписанные shebang в неправильное место.

Я установил пакет python anaconda и setuptools. Я подтвердил, что исполняемый файл python указывает на исполняемый файл anaconda

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

Мне нужно установить специальный пакет на мой питон anaconda. Его можно установить только с помощью setuptools. Он включает исполняемый файл командной строки со следующей строкой вверху:

#!/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. В сообщении предполагается, что исполняемый файл python, который находится первым в $PATH должен быть исполняемым файлом, который setuptools использует для замены shebang. Однако мне кажется, что это не так.

Примечание. Я не могу жестко закодировать исполняемый файл python в свою команду python setup.py build. Мне нужно решение для развертывания, которое будет работать в любой среде, где conda установлена ​​как первый питон в $PATH


person GrantD71    schedule 31.08.2016    source источник


Ответы (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 вызывается до sudo python setup.py, установка возвращается к питону по умолчанию.

См. этот пост для обсуждения.

person GrantD71    schedule 31.08.2016