2

I'm having an issue where packages installed via setuptools to python anaconda have shebangs rewritten to the wrong location.

I have installed python anaconda and setuptools package. I have verified that python executable points to the anaconda executable

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

I need to install a custom package to my anaconda python. It is only installable via setuptools. It includes an command-line executable with the following shebang at the top:

#!/usr/bin/env python

After installing the package with the following command:

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

The executable (content_analysis) appears in a path reachable location. But the shebang at the top has been replaced with the hard coded location of the default python install on the machine.

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

I have read the following post here concerning setuptools' overwrite of shebangs. The post suggests that the python executable that is first in the $PATH should be the executable that setuptools uses to replace the shebang. This doesn't seem to be the case for me however.

Note: I cannot hardcode a python executable into my python setup.py build command. I need a deployment solution that will work in any environment that has conda installed as the first python in the $PATH

Community
  • 1
  • 1
GrantD71
  • 1,787
  • 3
  • 19
  • 27

1 Answers1

2

I finally figured out what has been causing all my issues getting python and dependencies properly installed:

Whenever sudo is invoked before an executable, in Debian the $PATH variable is automatically changed to a secure path lookup. Here is a demonstration:

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

versus

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

So, when sudo is invoked prior to sudo python setup.py the install is reverting back to the default python.

See this post for discussion

Community
  • 1
  • 1
GrantD71
  • 1,787
  • 3
  • 19
  • 27