I've started to use my Mac to install Python packages in the same way I do with my Windows PC at work; however on my Mac I've come across frequent permission denied errors while writing to log files or site-packages.
Therefore I thought about running pip install <package>
under sudo
but is that a safe/acceptable use of sudo considering I'm just wanting this to be installed under my current user account?
Example traceback from a logfile I/O error:
Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/tq/hy1fz_4j27v6rstzzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt failed with error code 1 in /Users/markwalker/build/pycrypto
Storing complete log in /Users/markwalker/Library/Logs/pip.log
Traceback (most recent call last):
File "/usr/local/bin/pip", line 8, in <module>
load_entry_point('pip==1.1', 'console_scripts', 'pip')()
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", line 116, in main
return command.main(args[1:], options)
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 141, in main
log_fp = open_logfile(log_fn, 'w')
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 168, in open_logfile
log_fp = open(filename, mode)
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'
Update
This was likely down to permissions, however the best approach is to use virtual environments for your python projects. Running sudo pip
should be avoided unless absolutely necessary.
It looks like your permissions are messed up. Type
chown -R markwalker ~
in the Terminal and trypip
again? Let me know if you're sorted.Your original problem is that pip cannot write the logs to the folder.
You need to cd into a folder in which the process invoked can write like
/tmp
so acd /tmp
and re invoking the command will probably work but is not what you want.BUT actually for this particular case (you not wanting to use
sudo
for installing python packages) and no need for global package installs you can use the--user
flag like this :and it will work just fine.
I assume you have a one user python python installation and do not want to bother with reading about virtualenv (which is not very userfriendly) or pipenv.
As some people in the comments section have pointed out the next approach is not a very good idea unless you do not know what to do and got stuck:
Another approach for global packages like in your case you want to do something like :
or more generally
Because I had the same problem, I want to stress that actually the first comment by Brian Cain is the solution to the "IOError: [Errno 13]"-problem:
If executed in the temp directory (
cd /tmp
), the IOError does not occur anymore if I runsudo pip install foo
.It's not safe and it's being frowned upon – see What are the risks of running 'sudo pip'? To install Python package in your home directory you don't need root privileges. See description of
--user
option to pip.I had a problem installing
virtualenvwrapper
after successfully installingvirtualenv
.My terminal complained after I did this:
So, I unsuccessfully tried this
(NOT RECOMMENDED):Then, I successfully installed it with this:
Use a virtual environment:
You only use
sudo
or elevated permissions when you want to install stuff for the global, system-wide Python installation.It is best to use a virtual environment which isolates packages for you. That way you can play around without polluting the global python install.
As a bonus, virtualenv does not need elevated permissions.