I attempt to deploy a Python package with
pip in a virtual environment on an Ubuntu machine, but encounter a permission-related issue. For example:
(TestVirtualEnv)[email protected]:~$ pip install markdown2
error: could not create ‘/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py’: Permission denied
sudo, since it will install the package globally, and not within the virtual environment. I
ls shows only directories related to
setuptools, and nothing related to Markdown.
How to deploy a package in a virtual environment with
pip without encountering permission-related errors?
virtualenv permission problems might occur when you create the
sudo and then operate without
sudo in the
As found out in your question’s comment, the solution here is to create the
sudo to be able to work (esp. write) in it without
If you created the virtualenv as root, run the following command:
sudo chown -R your_username:your_username path/to/virtuaelenv/
This will probably fix your problem.
I didn’t create my virtualenv using sudo. So Sebastian’s answer didn’t apply to me. My project is called
utils. I checked
utils directory and saw this:
-rw-r--r-- 1 macuser staff 983 6 Jan 15:17 README.md drwxr-xr-x 6 root staff 204 6 Jan 14:36 utils.egg-info -rw-r--r-- 1 macuser staff 31 6 Jan 15:09 requirements.txt
As you can see,
utils.egg-info is owned by
macuser. That is why it was giving me
permission denied error. I also had to remove
/Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link as it was created by
root as well. I did
pip install -e . again after removing those, and it worked.
In my case, I was using
mkvirtualenv, but didn’t tell it I was going to be using python3. I got this error:
mkvirtualenv hug pip3 install hug -U .... error: could not create '/usr/lib/python3.4/site-packages': Permission denied
It worked after specifying python3:
mkvirtualenv --python=/usr/bin/python3 hug pip3 install hug -U
You did not activate the virtual environment before using pip.
Try it with:
$(your venv path) . bin/activate
And then use pip -r requirements.txt on your main folder
While creating virtualenv if you use sudo the directory is created with root privileges.So when you try to install a package with non-sudo user you won’t have permission to install into it.
So always create virtualenv without sudo and install without sudo.
You can also copy packages installed on global python to virtualenv.
cp -r /lib/python/site-packages/* virtualenv/lib/python/site-packages/