我在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
重新安装了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
在我的venv中给了我正确的python。但是,我得到的结果与开头完全相同,pip list
没有lsm-db
,因此无法在python中导入。
这完全是ec2上的问题,我可以在Mac上的virtualenv中成功使用lsm-db
。此处的ec2上的virtualenv
必须关闭,为什么venv中正确的点不能在venv中安装软件包?我完全迷路了。如果有人有经验,请报名!
(要变通解决此问题,我将代码中的lsm-db
切换为sqlitedict
。可以毫无问题地安装sqlitedict
,因此将可疑范围缩小到{ {1}}个具体问题。)
2016年的这个问题与我的问题更相似,但没有结论为什么或任何解决方案。 Pip says that pymongo has been installed, but doesn't show it as installed
另一个可能相关的问题: Amazon EC2 virtualenv: pip says it installed numpy but python can't find it
答案 0 :(得分:0)
问题似乎出在系统文件权限上。您可以使用以下命令从终端检查所有者':group以及文件夹'/home/ec2-user/.cache/pip'的其他用户的 rwx 权限:
ls -lh /home/ec2-user/.cache/pip
要更改文件夹的所有者,请使用命令:
sudo chown -R ec2-user /home/ec2-user/.cache/pip
另一种解决方法是通过以下方式允许所有用户使用rwx权限:
sudo chmod -R 777 /home/ec2-user/.cache/pip