[英]Cannot pip install package in virtualenv on EC2
我在 ec2 上看到了这个奇怪的问题。 我正在尝试在我的 virtualenv 中安装lsm-db
包,它说它已成功安装,但是在尝试导入包或执行pip list
它不存在。
我创建了这个 virtualenv
virtualenv -p python3.6 venv
source venv/bin/activate
然后运行which python
和which pip
在venv
显示正确的<path-to-my-project>/venv/bin/pip
。 然后我运行pip install -r requirements.txt
其中包含sqlalchemy
和lsm-db
。 显示警告
WARNING: Building wheel for lsm-db failed: [Errno 13] Permission denied: '/home/ec2-user/.cache/pip'
WARNING: Building wheel for sqlalchemy failed: [Errno 13] Permission denied: '/home/ec2-user/.cache/pip'
Failed to build lsm-db sqlalchemy
Installing collected packages: sqlalchemy, flask-sqlalchemy, lsm-db, MarkupSafe, click
Running setup.py install for sqlalchemy ... done
Running setup.py install for lsm-db ... done
Successfully installed MarkupSafe-1.1.1 click-7.0 flask-sqlalchemy-2.4.0 lsm-db-0.6.4 sqlalchemy-1.3.5
尽管有警告,最后一行显示它们已正确安装。 然而,他们不是。 运行 pip install lsm-db 给出
▶ pip install lsm-db
WARNING: The directory '/home/ec2-user/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
WARNING: The directory '/home/ec2-user/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting lsm-db
Downloading https://files.pythonhosted.org/packages/17/f2/dc68ecdece424eb206c42b8db924c5a7f6dd97d26df42a1c9fb41a6fe555/lsm-db-0.6.4.tar.gz (316kB)
|████████████████████████████████| 317kB 14.7MB/s
Building wheels for collected packages: lsm-db
WARNING: Building wheel for lsm-db failed: [Errno 13] Permission denied: '/home/ec2-user/.cache/pip'
Failed to build lsm-db
Installing collected packages: lsm-db
Running setup.py install for lsm-db ... done
Successfully installed lsm-db-0.6.4
它再次显示它已安装,但事实并非如此。 不在 pip 列表中,无法在 Python 中导入。 这里发生了什么? 为什么我在virtualenv
看到权限问题? 如果这是一个潜在的问题,我没有使用 sudo 创建virtualenv
。 是否与我安装virtualenv
的方式有关?
编辑
我更改了权限并使用sudo yum install python36-pip
重新sudo yum install python36-pip
。 现在我看到了这个......抱歉,这似乎是一个新问题
Running setup.py install for lsm-db ... error
ERROR: Complete output from command /home/ec2-user/<project>/venv/bin/python3.6 -u -c 'import setuptools, tokenize;__file__='"'"'/tmp/pip-install-bhhmd3j8/lsm-db/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-__gotpo6/install-record.txt --single-version-externally-managed --compile --install-headers /home/ec2-user/<project>/venv/include/site/python3.6/lsm-db:
ERROR: /tmp/pip-install-bhhmd3j8/lsm-db/setup.py:11: UserWarning: Cython not installed, using pre-generated C source file.
warnings.warn('Cython not installed, using pre-generated C source file.')
running install
running build
running build_ext
building 'lsm' extension
creating build
creating build/temp.linux-x86_64-3.6
creating build/temp.linux-x86_64-3.6/src
gcc -pthread -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/python3.6m -c lsm.c -o build/temp.linux-x86_64-3.6/lsm.o
lsm.c:32:20: fatal error: Python.h: No such file or directory
#include "Python.h"
^
compilation terminated.
error: command 'gcc' failed with exit status 1
----------------------------------------
ERROR: Command "/home/ec2-user/<project>/venv/bin/python3.6 -u -c 'import setuptools, tokenize;__file__='"'"'/tmp/pip-install-bhhmd3j8/lsm-db/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-__gotpo6/install-record.txt --single-version-externally-managed --compile --install-headers /home/ec2-user/<project>/venv/include/site/python3.6/lsm-db" failed with error code 1 in /tmp/pip-install-bhhmd3j8/lsm-db/
编辑
谢谢指点,现在我在ec2上安装了python开发包,再次尝试安装lsm-db
> sudo yum install python36-devel
...
> pip install lsm-db
Collecting lsm-db
Using cached https://files.pythonhosted.org/packages/17/f2/dc68ecdece424eb206c42b8db924c5a7f6dd97d26df42a1c9fb41a6fe555/lsm-db-0.6.4.tar.gz
Building wheels for collected packages: lsm-db
Building wheel for lsm-db (setup.py) ... done
Stored in directory: /home/ec2-user/.cache/pip/wheels/ed/32/8a/b0f3aa15b68f1e6b8f2dcc6285de4796b6b58af71c5f280f48
Successfully built lsm-db
Installing collected packages: lsm-db
Successfully installed lsm-db-0.6.4
再次,它表明它是成功的, which python
python 在我的 venv 中为我提供了正确的 python。 但是,我的结果与开头完全相同, pip list
没有lsm-db
,我无法在 python 中导入它。
这完全是 ec2 的问题,我可以在我的 mac 上的 virtualenv 中成功使用lsm-db
。 这里ec2上的virtualenv
肯定有问题,为什么venv中正确的pip不能在venv中安装包?? 我完全迷失了。 有经验的朋友请指教!
(为了解决这个问题,我在我的代码中从sqlitedict
lsm-db
切换到sqlitedict
。安装sqlitedict
没有问题,所以它可以将怀疑范围缩小到lsm-db
特定的问题。)
2016 年的这个问题与我的更相似,但没有结论为什么或任何解决方案。 Pip 说 pymongo 已安装,但未将其显示为已安装
另一个可能相关的问题: Amazon EC2 virtualenv: pip 说它安装了 numpy 但 python 找不到它
问题似乎与系统文件权限有关。 您可以使用以下命令从终端检查文件夹“/home/ec2-user/.cache/pip”的其他用户的 owner:group 以及rwx权限:
ls -lh /home/ec2-user/.cache/pip
要更改文件夹的所有者,请使用命令:
须藤 chown -R ec2-user /home/ec2-user/.cache/pip
另一种解决方法是通过以下方式允许所有用户拥有 rwx 权限:
须藤 chmod -R 777 /home/ec2-user/.cache/pip
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.