Nils Guillermin
Nils Guillermin

Reputation: 1987

Pip default behavior conflicts with virtualenv?

I was following this tutorial

When I got to virtualenv flask command, I received this error message:

Can not perform a '--user' install. User site-packages are not visible in this virtualenv.

This makes sense as the point of virtualenv is to create a new environment which you can control, and the --user command places everything in a specific location, defeating the objective of separation of dev environment.

It seems like pip defaults to --user installations though, can I change this default behavior? And, even better, can I get pip to play nice with virtualenv at all times?

To clarify, here is what my terminal looks like.

MELCHIOR:miguelgrinberg-microblog megablanc$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools, pip, wheel...
  Complete output from command /Users/megablanc/Dev...log/flask/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip wheel:
  Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
----------------------------------------
...Installing setuptools, pip, wheel...done.
Traceback (most recent call last):
  File "/Users/megablanc/Library/Python/2.7/bin/virtualenv", line 11, in <module>
    sys.exit(main())
  File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 832, in main
    symlink=options.symlink)
  File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 1004, in create_environment
    install_wheel(to_install, py_executable, search_dirs)
  File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 969, in install_wheel
    'PIP_NO_INDEX': '1'
  File "/Users/megablanc/Library/Python/2.7/lib/python/site-packages/virtualenv.py", line 910, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command /Users/megablanc/Dev...log/flask/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip wheel failed with error code 1

Upvotes: 53

Views: 110457

Answers (11)

srikanth sridhar
srikanth sridhar

Reputation: 191

There is a pip.conf file in ~/.pip. There I changed the flag user=true to user=false using the command gedit pip.conf, after which I am able to create virtual environment successfully.

Upvotes: 19

Kartik Soneji
Kartik Soneji

Reputation: 1246

Check if your the PIP_USER environment variable is set.
That fixed the issue for me.
If you are using GitPod then this is a known issue.

Upvotes: 5

Eray Erdin
Eray Erdin

Reputation: 3149

Some people suggest you to edit /etc/pip.conf, which (i) requires superuser privileges and (ii) may break your whole system if done wrong. So, it is better to keep it to only your user.

Open up$HOME/.pip/pip.conf with a text editor. If it does not exist (which is the case in my Manjaro machine), create it. Then add the lines below, save and close.

[global]
user=false

When you change a setting for your programs, prefer under $HOME for doing that if possible, which will (i) persist the setting among updates and reinstalling system (if you have separated your disk to / and /home partitions, of course) and (ii) will not possibly break further upgrades of the program, in this case, pip.

Upvotes: 5

idyllictech
idyllictech

Reputation: 41

This worked for me, I only changed the $VIRTUAL_ENV_DIRECTORY/pyvenv.cfg to

include-system-site-packages = true

The default setting

include-system-site-packages = false

Note:

> python --version 
Python 3.8.3 r c 1

Upvotes: 3

yourihdx
yourihdx

Reputation: 11

Although the question was asked quite a pretty while ago, maybe another answer would be useful to someone anyway.

If the described issue happens only when trying to install packages to virtualenv which is outside your home directory, the problem might be that user account you logged in does not have permissions on the folder you are trying to install to.

Use chown to change / raise user's permission on the folder where target virtual environment is placed, for example:

chown username /var/www/your-webproject-folder/ -r

or

sudo chown username /var/www/your-webproject-folder/ -r

if you have to do it with root.

Upvotes: 1

B.SEZ
B.SEZ

Reputation: 854

when your virutalenv myenv is activated (source myenv/bin/activate), remove --user.

Upvotes: 7

Fabian Bosler
Fabian Bosler

Reputation: 2510

what worked for me was to change the $VIRTUAL_ENV_DIRECTORY/pyvenv.cfg to include-system-site-packages = true seems hacky though.

Upvotes: 28

MewX
MewX

Reputation: 4312

In my case, there was a file in /etc/pip.conf setting the user=true secretly. So, every time I activated a virtualenv, that config still affected the virtualenv.

Removing that line worked for me.

Upvotes: 9

Pratik Khadloya
Pratik Khadloya

Reputation: 12869

In my case it was a custom python installation from anaconda was interfering with the system installation. Check which pip... the solution is to either remove or move the custom installation of python.

Upvotes: 1

jmunsch
jmunsch

Reputation: 24089

In my case I was doing a make test for the python disco mapreduce library.

So I modified the Makefile test section and removed the --user flag.

Upvotes: 1

benlaird
benlaird

Reputation: 879

You don't need to set the --user flag. After you create your virtualenv (virtualenv flask), activate it: source flask/bin/activate. Your shell should look something like (flask) ~>.

Once your virtualenv is activated, you should be able to pip install packages without issue. For example, pip install numpy. They'll be installed in: lib/python2.6/site-packages/ (for whatever version of Python you are using)

Upvotes: 65

Related Questions