virtualenv looking in the wrong place for easy_install & other files - python

Somehow I screwed up my python 2.7 installation on my mac so I tried to reinstall with "brew install python". Now when I try to create a new virtualenv, it throws an error about not finding /bin/easy_install. easy_install is actually in /usr/local/bin/easy_install. If I symlink it to /bin, virtualenv fails with /bin/pip and so on - every file it's looking for is actually in /usr/local/bin not /bin
How can I permanently make virtualenv look in the right place: /usr/local/bin?
$ virtualenv env
New python executable in /Users/myusername/code/lambda/env/bin/python2.7
Also creating executable in /Users/myusername/code/lambda/env/bin/python
Installing setuptools, pip, wheel...
Complete output from command /Users/myusername/c...da/env/bin/python2.7 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip wheel:
Ignoring indexes: https://pypi.python.org/simple
Collecting setuptools
Collecting pip
Collecting wheel
Installing collected packages: setuptools, pip, wheel
Exception:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/virtualenv_support/pip-7.1.2-py2.py3-none-any.whl/pip/basecommand.py", line 211, in main
status = self.run(options, args)
File "/usr/local/lib/python2.7/site-packages/virtualenv_support/pip-7.1.2-py2.py3-none-any.whl/pip/commands/install.py", line 311, in run
root=options.root_path,
File "/usr/local/lib/python2.7/site-packages/virtualenv_support/pip-7.1.2-py2.py3-none-any.whl/pip/req/req_set.py", line 646, in install
**kwargs
File "/usr/local/lib/python2.7/site-packages/virtualenv_support/pip-7.1.2-py2.py3-none-any.whl/pip/req/req_install.py", line 803, in install
self.move_wheel_files(self.source_dir, root=root)
File "/usr/local/lib/python2.7/site-packages/virtualenv_support/pip-7.1.2-py2.py3-none-any.whl/pip/req/req_install.py", line 998, in move_wheel_files
isolated=self.isolated,
File "/usr/local/lib/python2.7/site-packages/virtualenv_support/pip-7.1.2-py2.py3-none-any.whl/pip/wheel.py", line 465, in move_wheel_files
generated.extend(maker.make(spec))
File "/usr/local/lib/python2.7/site-packages/virtualenv_support/pip-7.1.2-py2.py3-none-any.whl/pip/_vendor/distlib/scripts.py", line 353, in make
self._make_script(entry, filenames, options=options)
File "/usr/local/lib/python2.7/site-packages/virtualenv_support/pip-7.1.2-py2.py3-none-any.whl/pip/_vendor/distlib/scripts.py", line 257, in _make_script
self._write_script(scriptnames, shebang, script, filenames, ext)
File "/usr/local/lib/python2.7/site-packages/virtualenv_support/pip-7.1.2-py2.py3-none-any.whl/pip/_vendor/distlib/scripts.py", line 231, in _write_script
self._fileop.write_binary_file(outname, script_bytes)
File "/usr/local/lib/python2.7/site-packages/virtualenv_support/pip-7.1.2-py2.py3-none-any.whl/pip/_vendor/distlib/util.py", line 388, in write_binary_file
with open(path, 'wb') as f:
IOError: [Errno 13] Permission denied: '/bin/easy_install'
----------------------------------------
...Installing setuptools, pip, wheel...done.
Traceback (most recent call last):
File "/usr/local/bin/virtualenv", line 9, in <module>
load_entry_point('virtualenv==13.2.0.dev0', 'console_scripts', 'virtualenv')()
File "/usr/local/lib/python2.7/site-packages/virtualenv.py", line 699, in main
symlink=options.symlink)
File "/usr/local/lib/python2.7/site-packages/virtualenv.py", line 872, in create_environment
install_wheel(to_install, py_executable, search_dirs)
File "/usr/local/lib/python2.7/site-packages/virtualenv.py", line 837, in install_wheel
'PIP_USER': '0'
File "/usr/local/lib/python2.7/site-packages/virtualenv.py", line 777, in call_subprocess
% (cmd_desc, proc.returncode))
OSError: Command /Users/myusername/c...da/env/bin/python2.7 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip wheel failed with error code 2
About halfway down that output you can see virtualenv looking for /bin/easy_install
$ ls -al /bin/easy_install
ls: /bin/easy_install: No such file or directory
$ ls -al /usr/local/bin/easy_install
lrwxr-xr-x 1 myusername admin 40 Dec 22 14:21 /usr/local/bin/easy_install -> ../Cellar/python/2.7.11/bin/easy_install
But it should be looking in /usr/local/bin instead because that's the only easy_install I have now and it works:
$ which easy_install
/usr/local/bin/easy_install
$ easy_install
install_dir /usr/local/lib/python2.7/site-packages/
error: No urls, filenames, or requirements specified (see --help)
I've tried to pip uninstall virtualenv then pip install virtualenv but that didn't help - same issue.
Anyone know how to fix this?
Thanks!
====================
EDIT: Solved!
Tried using /usr/local/bin/virtualenv-2.7 and it worked as expected. I moved /usr/local/bin/virtualenv then symlinked /usr/local/bin/virtualenv-2.7 back to /usr/local/bin/virtualenv --- now all appears to be well in the world.

Solved! Tried using /usr/local/bin/virtualenv-2.7 and it worked as expected. I moved /usr/local/bin/virtualenv then symlinked /usr/local/bin/virtualenv-2.7 back to /usr/local/bin/virtualenv --- now all appears to be well in the world.

I compiled my own Python 3, then installed virtualenvwrapper. But after I switched from compiling my own Python to using the deadsnakes PPA I ran into the issue described in the question above.
Seems there's something going on with the #! part of the virtualenv script.
The error I was getting was as follows:
nb#ubuntu-0xA520322HC30H:~/proj/redis-py$ mkvirtualenv --python='/usr/bin/python3' redispytest
bash: /home/nb/.local/bin/virtualenv: /usr/local/bin/python3.6: bad interpreter: No such file or directory
My system Python setup had the following symlinks and Python locations:
nb#ubuntu-0xA520322HC30H:~/proj/redis-py$ ls -la /usr/bin/python3
lrwxrwxrwx 1 root root 9 Feb 8 11:43 /usr/bin/python3 -> python3.5
nb#ubuntu-0xA520322HC30H:~/proj/redis-py$ ls -la /usr/bin/python3.5
-rwxr-xr-x 2 root root 4464400 Nov 28 08:53 /usr/bin/python3.5
nb#ubuntu-0xA520322HC30H:~/proj/redis-py$ which python3.5
/usr/bin/python3.5
nb#ubuntu-0xA520322HC30H:~/proj/redis-py$ ls -la /usr/bin/python3.5
-rwxr-xr-x 2 root root 4464400 Nov 28 08:53 /usr/bin/python3.5
nb#ubuntu-0xA520322HC30H:~/proj/redis-py$ ls -la /usr/bin/python3.6
-rwxr-xr-x 2 root root 4695328 Jan 28 10:49 /usr/bin/python3.6
nb#ubuntu-0xA520322HC30H:~/proj/redis-py$ which virtualenv
/home/nb/.local/bin//virtualenv
And, in /home/nb/.local/bin/¹:
nb#ubuntu-0xA520322HC30H:~/proj/redis-py$ cd ~/.local/bin
nb#ubuntu-0xA520322HC30H:~/.local/bin$ ls
pbr pip2 pip3 virtualenv virtualenvwrapper_lazy.sh
pip pip2.7 pip3.5 virtualenv-clone virtualenvwrapper.sh
I wondered where this mysterious, and completely absent /usr/local/bin/python3.6 was in the code.
So I installed a full-text search tool and looked for it in the ~/.local folder.
nb#ubuntu-0xA520322HC30H:~$ cd .local
nb#ubuntu-0xA520322HC30H:~/.local$ sudo apt-get install --quiet --quiet silversearcher-ag
nb#ubuntu-0xA520322HC30H:~/.local$ ag '/usr/local/bin/python3.6'
bin/virtualenv-clone
1:#!/usr/local/bin/python3.6
bin/pbr
1:#!/usr/local/bin/python3.6
Looks like the static reference to Python's in 2 places.
I now have two options:
I can edit the /usr/local/bin/python3.6 text in there to refer to /usr/bin/python3.6
I can make a symlink from /usr/local/bin/python3.6 -> /usr/bin/python3.6
I went with option 1 for the bin/virtualenv-clone file:
But I also did option 2, just in case this problem exists elsewhere on my system.
nb#ubuntu-0xA520322HC30H:~$ sudo ln -s /usr/bin/python3.6 /usr/local/bin/python3.6
Well, whatever it was, that worked:
nb#ubuntu-0xA520322HC30H:~/.local$ mkvirtualenv --python='/usr/bin/python3' redispytest
Running virtualenv with interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/nb/Envs/redispytest/bin/python3
Also creating executable in /home/nb/Envs/redispytest/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /home/nb/Envs/redispytest/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/nb/Envs/redispytest/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/nb/Envs/redispytest/bin/preactivate
virtualenvwrapper.user_scripts creating /home/nb/Envs/redispytest/bin/postactivate
virtualenvwrapper.user_scripts creating /home/nb/Envs/redispytest/bin/get_env_details
(redispytest) nb#ubuntu-0xA520322HC30H:~/.local$
Summary: Find out which interpreter location your virtualenv is trying to use, and make a symlink from that location to your actual Python.
The reason you need to do this is that at least a few virtualenv locations will have a #! line that refers to a specific location, but won't change if you, say, switch from compiling your own Python to using a PPA.
At first I was hesitant to do this, since I prefer to let the package manager handle this sort of thing, and not complicate my paths too much. But there really doesn't seem to be any other way to fix this. I tried uninstalling and reinstalling both virtualenv and virtualenvwrapper, to no avail.
¹Hmmm... there's pbr's in my .local/bin. What's next, my .local/fridge? Damn hipsters.

Related

Errors occur when compiling tensorflow serving by bazel: Python Configuration Error: --define PYTHON_BIN_PATH='/usr/bin/python3' is not executable

I was installing the tf serving by compiling the source code.
The command line was:
$ git clone -b r1.10 https://github.com/tensorflow/serving.git
$ cd serving
$ bazel test tensorflow_serving/...
and my bazel vision is
$ bazel --version
bazel 2.1.0
The error information is as follows:
ERROR: An error occurred during the fetch of repository 'local_config_python':
Traceback (most recent call last):
File "/private/var/tmp/_bazel_limingliang/1c00e8fe288c428416b8275600af1770/external/org_tensorflow/third_party/py/python_configure.bzl", line 345
_create_local_python_repository(<1 more arguments>)
File "/private/var/tmp/_bazel_limingliang/1c00e8fe288c428416b8275600af1770/external/org_tensorflow/third_party/py/python_configure.bzl", line 292, in _create_local_python_repository
_check_python_bin(<2 more arguments>)
File "/private/var/tmp/_bazel_limingliang/1c00e8fe288c428416b8275600af1770/external/org_tensorflow/third_party/py/python_configure.bzl", line 234, in _check_python_bin
_fail(<1 more arguments>)
File "/private/var/tmp/_bazel_limingliang/1c00e8fe288c428416b8275600af1770/external/org_tensorflow/third_party/py/python_configure.bzl", line 27, in _fail
fail(<1 more arguments>)
Python Configuration Error: --define PYTHON_BIN_PATH='/usr/bin/python3' is not executable. Is it the python binary?
I find that in the "/usr/bin/" directory, there is not the python3 bin file.
$ cd /usr/bin/
$ ls | grep python
python
python-config
python2.7
python2.7-config
pythonw
pythonw2.7
So I change the value of PYTHON_BIN_PATH to "/usr/bin/python"
$ export PYTHON_BIN_PATH=/usr/bin/python
$ echo $PYTHON_BIN_PATH
/usr/bin/python
However, it still doesn't work.
The error message is defining the python path as '/usr/bin/python3', so adding /usr/bin/python' to the path may not matter. Have you tried linking /usr/bin/python3 to /usr/bin/python?
For example, ln -s /usr/bin/python3 /usr/bin/python

Error creating virtualenv with Python3

I'm working on Linux Mint 17 and I'm trying to create a new virtualenv with Python3 like this:
python3.6 -m venv env
And this is the error that I get:
Error: Command '['/home/ric/myprojs/django-example-channels/env/bin/python3.6', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
I've googled this error message but haven't managed to find anything too informative.
This is my pip version, in case it make any difference:
pip --version
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)
I've been using Python2 for some time, but I'm new to Python3. I don't know what I may be missing.
UPDATE 1:
Answering #cezar's question, when I type  which python3 this is what I get:
$ which python3
/usr/bin/python3
UPDATE 2:
Answering #Chłop Z Lasu:
$ virtualenv -p python3.6 env
Running virtualenv with interpreter /usr/bin/python3.6
Using base prefix '/usr'
New python executable in /home/ric/myprojs/django-example-channels/example_channels/env/bin/python3.6
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 2328, in <module>
main()
File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 713, in main
symlink=options.symlink)
File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 925, in create_environment
site_packages=site_packages, clear=clear, symlink=symlink))
File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 1231, in install_python
shutil.copyfile(executable, py_executable)
File "/usr/lib/python3.6/shutil.py", line 104, in copyfile
raise SameFileError("{!r} and {!r} are the same file".format(src, dst))
The error indicates that virtualenv is trying to make an environment in your python path. therefore, you have to specify your virtualenv destination
virtualenv -p python3.6 /path/to/yourenv
For venv and python3.6 installing venv one can use below to fix the issue
sudo apt install python3.6-venv
You gotta install the venv via code bellow:
sudo apt install python3.6-venv
Expanding on the Answer Above:
The error indicates that virtualenv is trying to make an environment in your python path. therefore, you have to specify your virtualenv destination
Since -p is a flag equivalent to --python, you can also use.
$ virtualenv --python=python3.6 /path/to/yourenv
Or
$ virtualenv -p python3.6 /path/to/yourenv

bad interpreter while attempting pip install flask

I do have Flask installed at my root directory, however whenever I change directories and run a virutalenv venv to attempt to install flask via pip install flask I receive the following error
bash: /home/phillipsk/rampup/sql/venv/bin/easy_install: /home/phillipsk/rampup/webapp/sql/venv/bin/python: bad interpreter: No such file or directory
Here are the contents of the venv directory
activate activate.csh activate.fish activate_this.py easy_install easy_install-2.7 pip pip2 pip2.7 python python2 python2.7
I can run /home/phillipsk/rampup/webapp/sql/venv/bin/python
and the python interpreter opens
Python 2.7.6
here is the ls -l of
/home/phillipsk/rampup/webapp/sql/venv/bin/python
-rwxr-xr-x 1 root root 3349512 Aug 15 13:11 /home/phillipsk/rampup/webapp/sql/venv/bin/python
This is my attempt at running pip install flask
> (venv)phillipsk#phillips:~/rampup/webapp/sql/venv/bin$ pip install flask Downloading/unpacking flask Cleaning up... Exception: Traceback
> (most recent call last): File
> "/home/phillipsk/rampup/webapp/sql/venv/local/lib/python2.7/site-packages/pip/basecommand.py",
> line 122, in main
> status = self.run(options, args) File "/home/phillipsk/rampup/webapp/sql/venv/local/lib/python2.7/site-packages/pip/commands/install.py",
> line 278, in run
> requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle) File
> "/home/phillipsk/rampup/webapp/sql/venv/local/lib/python2.7/site-packages/pip/req.py",
> line 1153, in prepare_files
> location = req_to_install.build_location(self.build_dir, not self.is_download) File
> "/home/phillipsk/rampup/webapp/sql/venv/local/lib/python2.7/site-packages/pip/req.py",
> line 218, in build_location
> _make_build_dir(build_dir) File "/home/phillipsk/rampup/webapp/sql/venv/local/lib/python2.7/site-packages/pip/req.py",
> line 1527, in _make_build_dir
> os.makedirs(build_dir) File "/home/phillipsk/rampup/webapp/sql/venv/lib/python2.7/os.py", line
> 157, in makedirs
> mkdir(name, mode) OSError: [Errno 13] Permission denied: '/home/phillipsk/rampup/webapp/sql/venv/build'
>
> Storing debug log for failure in /home/phillipsk/.pip/pip.log
sudo pip install flask does work but regardless after running either pip commands I immediately enter into a python interpreter and import flask with no success
As a temporary solution, try changing ownership of your venv folder and all underlying files and folders:
sudo chown -R yourusername:yourusersgroup venv
then reactivate virtualenv and try instaling flask without sudo.
Btw. if you are using sudo when creating virtualenvs, you shouldn't. Run virtualenv /path/to/virtualenv without sudo and logged in as a regular user, activate it and then pip install stuff. Hope this helps.
As a sidenote look into virtualenvwrapper project. It might make things easier for you in the future.
http://virtualenvwrapper.readthedocs.org/en/latest/
the directory is owned by root,
you said it yourself
-rwxr-xr-x 1 root root 3349512 Aug 15 13:11 /home/phillipsk/rampup/webapp/sql/venv/bin/python
so to do it just
sudo pip install flask

Installation issues for Virtualenv and VirtualenvWrapper in Ubuntu 13.04

Ubuntu Server in VirtualBox. I am trying to install VirtualEnv to start learning Flask and bottle.
Some details of my setup.
vks#UbSrVb:~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="12.04.2 LTS, Precise Pangolin"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu precise (12.04.2 LTS)"
VERSION_ID="12.04"
vks#UbSrVb:~$ python --version
Python 2.7.3
vks#UbSrVb:~$ echo $VIRTUALENVWRAPPER_PYTHON
/usr/bin/python
vks#UbSrVb:~$ echo $VIRTUALENV_PYTHON
vks#UbSrVb:~$
When I boot my Virtual Machine, I get the following error on my console
/usr/bin/python: No module named virtualenvwrapper
virtualenvwrapper.sh: There was a problem running the initialization hooks.
If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenv has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly.
When i try to initialize a virtualenv I get the following errors
vks#UbSrVb:~/dropbox/venv$ virtualenv try1
New python executable in try1/bin/python3.2
Also creating executable in try1/bin/python
Traceback (most recent call last):
File "/usr/local/bin/virtualenv", line 9, in <module>
load_entry_point('virtualenv==1.9.1', 'console_scripts', 'virtualenv')()
File "/usr/local/lib/python3.2/dist-packages/virtualenv.py", line 979, in main
no_pip=options.no_pip)
File "/usr/local/lib/python3.2/dist-packages/virtualenv.py", line 1081, in create_environment
site_packages=site_packages, clear=clear))
File "/usr/local/lib/python3.2/dist-packages/virtualenv.py", line 1499, in install_python
os.symlink(py_executable_base, full_pth)
OSError: [Errno 30] Read-only file system
vks#UbSrVb:~/dropbox/venv$ ls
try1
vks#UbSrVb:~/dropbox/venv$ ls try1/
bin include lib
vks#UbSrVb:~/dropbox/venv$
My .bashrc entries
export WORKON_HOME='~/dropbox/venv/'
source '/usr/local/bin/virtualenvwrapper.sh'
Q1 - As per the error at bootup, How do I ensure virtualenv is installed for VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly ?
Q2 - Even with sudo I get the same "Read-only file system" Error ?
I have tried installing virtualenv using pip and then apt-get, just to hit and try.
Try setting your WORKON_HOME global to another path (~/.virtualenvs) for example a see if that works, maybe the problem is with that shared directory, are you using windows? If you are, try installing ntfs-3g, see https://askubuntu.com/questions/70281/why-does-my-ntfs-partition-mount-as-read-only
Also in my profile configuration file I like to detect first if virtualenvwrapper is installed:
if which virtualenvwrapper.sh &> /dev/null; then
WORKON_HOME=$HOME/.virtualenvs
# path to virtualenvwrapper, in my case
source /usr/local/share/python/virtualenvwrapper.sh
fi
I had the problem where my pip was for a different version of python than the one I wanted to use.
$ python -V
Python 2.7.5+
$ pip -V
pip 1.5.4 from /usr/local/lib/python3.3/dist-packages (python 3.3)
So when I used pip to install virtualenv and virtualenvwrapper, the new python packages were put in python3.3's dist-packages, so of course my python2.7 couldn't find them!
To fix this, I had to use the appropriate version of pip, in my case it was pip2.
$ pip2 -V
pip 1.5.4 from /usr/local/lib/python2.7/dist-packages (python 2.7)
So make sure you are using the appropriate version of pip.

Why am I getting this error (related to pip and easy_install) when trying to setup a virtualenv?

I'm trying to create a Flask application to push to Heroku. When I try to create a virtualenv in the folder, I'm thrown this error:
photo-crawl › sudo virtualenv venv --distribute
Password:
New python executable in venv/bin/python
Installing distribute............................................................................................................................................................................................................................done.
Installing pip....
Complete output from command /Users/evansiegel/In...rawl/venv/bin/python -x /Users/evansiegel/In...env/bin/easy_install /Library/Python/2.7/...ort/pip-1.2.1.tar.gz:
/Users/evansiegel/Involvio/photo-crawl/venv/bin/python: can't open file '/Users/evansiegel/Involvio/photo-crawl/venv/bin/easy_install': [Errno 2] No such file or directory
----------------------------------------
...Installing pip...done.
Traceback (most recent call last):
File "/usr/local/bin/virtualenv", line 9, in <module>
load_entry_point('virtualenv==1.8.4', 'console_scripts', 'virtualenv')()
File "/Library/Python/2.7/site-packages/virtualenv.py", line 964, in main
never_download=options.never_download)
File "/Library/Python/2.7/site-packages/virtualenv.py", line 1076, in create_environment
install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
File "/Library/Python/2.7/site-packages/virtualenv.py", line 667, in install_pip
filter_stdout=_filter_setup)
File "/Library/Python/2.7/site-packages/virtualenv.py", line 1042, in call_subprocess
% (cmd_desc, proc.returncode))
OSError: Command /Users/evansiegel/In...rawl/venv/bin/python -x /Users/evansiegel/In...env/bin/easy_install /Library/Python/2.7/...ort/pip-1.2.1.tar.gz failed with error code 2
It seems that for some reason virtualenv is not putting everything it should be putting into the venv/bin folder. Right now, only python and two aliases, python2 and python2.7 are in there.
Thanks!
I believe this is caused by a bug in older versions of virtualenv and/or pip. It looks like you're using virtualenv 1.8.4 and pip 1.2.1. Is it possible for you to upgrade to latest virtualenv and pip (currently virtualenv 1.9.1 and pip 1.3.1)?
This should do it, if you have install privileges:
pip install pip --upgrade
pip install virtualenv --upgrade
At that point running the same command (i.e. sudo virtualenv venv --distribute) should give you what you want.

Categories