【发布时间】:2015-08-12 21:14:53
【问题描述】:
我的目标是在运行 Ubuntu 的 EC2 实例上提供一个使用 postgres 的 hello world Django 应用程序。我通过 ssh 登录并使用以下 requirements.txt 克隆了一个包含 Django 项目的 git repo:
Django==1.8.2
djangorestframework==3.1.2
psycopg2==2.6
我创建了一个 virtualenv,然后,当我运行 (ec2_deploy_test)ubuntu@ip-172-31-22-100:~/ec2-deploy-test$ pip install -r requirements.txt 时,抛出了这个异常:
收集 psycopg2==2.6(来自 -r requirements.txt(第 3 行)) /home/ubuntu/Envs/ec2_deploy_test/local/lib/python2.7/site-packages/pip/vendor/requests/packages/urllib3/util/ssl.py:90: InsecurePlatformWarning:真正的 SSLContext 对象不可用。 这会阻止 urllib3 正确配置 SSL,并可能导致 某些 SSL 连接失败。有关详细信息,请参阅 https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning。 InsecurePlatformWarning 正在下载 psycopg2-2.6.tar.gz (367kB) 100% |████████████████████████████████| 368kB 785kB/s 为收集的包构建轮子:psycopg2 例外:Traceback(大多数 最近通话最后):文件 “/home/ubuntu/Envs/ec2_deploy_test/local/lib/python2.7/site-packages/pip/basecommand.py”, 第 223 行,主要 status = self.run(options, args) 文件“/home/ubuntu/Envs/ec2_deploy_test/local/lib/python2.7/site-packages/pip/commands/install.py”, 第 291 行,运行中 wb.build(autobuilding=True) 文件“/home/ubuntu/Envs/ec2_deploy_test/local/lib/python2.7/site-packages/pip/wheel.py”, 第 753 行,正在构建中 ensure_dir(output_dir) 文件“/home/ubuntu/Envs/ec2_deploy_test/local/lib/python2.7/site-packages/pip/utils/init.py”,第 70 行,在 ensure_dir os.makedirs(path) 文件“/home/ubuntu/Envs/ec2_deploy_test/lib/python2.7/os.py”,第 150 行,在 制造商 makedirs(head, mode) 文件“/home/ubuntu/Envs/ec2_deploy_test/lib/python2.7/os.py”,第 150 行,在 制造商 makedirs(head, mode) 文件“/home/ubuntu/Envs/ec2_deploy_test/lib/python2.7/os.py”,第 150 行,在 制造商 makedirs(head, mode) 文件“/home/ubuntu/Envs/ec2_deploy_test/lib/python2.7/os.py”,第 157 行,在 制造商 mkdir(name, mode) OSError: [Errno 13] Permission denied: '/home/ubuntu/.cache/pip/wheels/ab'
然后我运行 (ec2_deploy_test)ubuntu@ip-172-31-22-100:~/ec2-deploy-test$ sudo pip install -r requirements.txt 并成功安装了 psycopg2。
为什么我需要 root 权限才能在我的虚拟环境中安装 python 包?我是 Linux 和系统管理员的新手,所以欢迎所有建议。提前致谢。
【问题讨论】:
-
id 你做了 sudo,它实际上并没有在你的 virtualenv 中安装它。此外,如果您以 root 身份创建 virtualenv,则用户将无权安装所有软件包