pip选项“--force-reinstall”是否重新编译模块? (我正在尝试重新安装cx_Oracle)

时间:2016-11-14 21:22:02

标签: python pip cx-oracle

我的设置有:

- 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并告诉我它重新安装了包。不太有用。

UPDATE1:

我尝试按照解决方案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,但是以某种方式将文件放在虚拟环境中?

UPDATE2:

我尝试下载cx_Oracle并使用以下命令手动编译:

sudo -u myuser ~/myvirtualenv/bin/python setup.py build install

但现在我看到一些权限错误:

(...)
error: could not create 'build/bdist.linux-x86_64/egg': Permission denied

我做对了吗?我不想搞乱这个环境。感谢。

2 个答案:

答案 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