Question:
I am trying to run a small python code (which requries pytz and some other packages) on a aws ec2 instance. When I tried to install pytz, I got some errors:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[ec2-user@ip-172-31-28-178 ~]$ pip install pytz Collecting pytz Using cached pytz-2016.7-py2.py3-none-any.whl Installing collected packages: pytz Exception: Traceback (most recent call last): File "/usr/local/lib/python2.7/site-packages/pip/basecommand.py", line 215, in main status = self.run(options, args) File "/usr/local/lib/python2.7/site-packages/pip/commands/install.py", line 342, in run prefix=options.prefix_path, File "/usr/local/lib/python2.7/site-packages/pip/req/req_set.py", line 784, in install **kwargs File "/usr/local/lib/python2.7/site-packages/pip/req/req_install.py", line 851, in install self.move_wheel_files(self.source_dir, root=root, prefix=prefix) File "/usr/local/lib/python2.7/site-packages/pip/req/req_install.py", line 1064, in move_wheel_files isolated=self.isolated, File "/usr/local/lib/python2.7/site-packages/pip/wheel.py", line 345, in move_wheel_files clobber(source, lib_dir, True) File "/usr/local/lib/python2.7/site-packages/pip/wheel.py", line 316, in clobber ensure_dir(destdir) File "/usr/local/lib/python2.7/site-packages/pip/utils/__init__.py", line 83, in ensure_dir os.makedirs(path) File "/usr/lib64/python2.7/os.py", line 157, in makedirs mkdir(name, mode) OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/site-packages/pytz-2016.7.dist-info' |
I followed the accepted answer of this topic but got another error:
sudo:pip: command not found
Then I found out it might be because the path setting is wrong
(according to this page. But I could not manage to Just add ~/.local/bin to your path
as suggested by the second answer.
Can someone show me how to add the bin to my path? I have no idea.
And some more info:
1 2 3 4 5 6 |
[ec2-user@ip-172-31-28-178 ug]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin [ec2-user@ip-172-31-28-178 ug]$ which pip /usr/local/bin/pip [ec2-user@ip-172-31-28-178 ug]$ |
Answer:
The default (secure_path
) for sudo is specified in /etc/sudoers
.
1 2 3 |
[ec2-user@ip-172-31-28-178 ~]$ sudo grep secure_path /etc/sudoers Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin |
Since
pip
is not found in that path, you are getting the not found error. Preserve your PATH
when running sudo
by:
1 2 |
sudo env "PATH=$PATH" pip install pytz |