我的设置有:
- oracle-instantclient (downgraded from 12 to 11)
- Virtual Environment with Python + Django + cx_Oracle
当我降级oracle-instantclient时,我尝试使用以下方法重新安装cx_oracle:
pip install --upgrade --force-reinstall cx_Oracle
问题是cx_Oracle一直在抱怨我没有使用之前安装的版本12:
$ python -c "import cx_Oracle"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: libclntsh.so.12.1: cannot open shared object file: No such file or directory
所以,这里有一些问题:“ - force-reinstall”不应该完全重新安装,包括模块重新编译(又名cx_Oracle)?有人建议如何解决这个问题?我查看了pip manual并告诉我它重新安装了包。不太有用。
我尝试按照解决方案here,将我的cx_Oracle路径添加到LD_LIBRARY_PATH但它仍然无效。
echo $LD_LIBRARY_PATH
/usr/lib/oracle/11.2/client64/lib:/home/myuser/myuserenv/lib/python3.5/site-packages/cx_Oracle-5.2.1.dist-info
请注意,我的root用户有一个不同的python,而我的virtualenv使用自己的python安装。
[root@myserver]# which python
/usr/bin/python
从我的虚拟环境:
(myvirtualenv) [myuser@myserver]$ which python
~/myvirtualenv/bin/python
有没有办法使用我的root用户手动安装cx_Oracle,但是以某种方式将文件放在虚拟环境中?
我尝试下载cx_Oracle并使用以下命令手动编译:
sudo -u myuser ~/myvirtualenv/bin/python setup.py build install
但现在我看到一些权限错误:
(...)
error: could not create 'build/bdist.linux-x86_64/egg': Permission denied
我做对了吗?我不想搞乱这个环境。感谢。
答案 0 :(得分:2)
您的问题的答案(尽管您似乎遇到了另一个问题)如下: 这取决于模块的结构。如果它的安装脚本调用编译器,那么是的。因为,你看,pip模块默认不包含已编译的部分,它由模块作者提供。
答案 1 :(得分:0)
我终于可以安装了。问题是我必须使用我的virtualenv的python。一个简单的解决方案,但我完全错过了。
步骤:
pip download cx_Oracle
tar -xvf cx_Oracle-5.2.1.tar.gz
~/myenv/bin/python setup.py -v build
sudo ~/myenv/bin/python setup.py install
请注意,我必须在最后一步使用sudo。没有这个,我有这个权限错误:
error: could not create 'build/bdist.linux-x86_64/egg': Permission denied