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

Does the pip option "--force-reinstall" recompiles a module? (I'm trying to reinstall 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 并告诉我它重新安装了软件包。不是很有用。

更新 1:

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

更新2:

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

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

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

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

我做的对吗?我不想弄乱这个环境。谢谢。

我终于可以安装了。问题是我不得不使用 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

你的问题(虽然你好像遇到了其他问题)的答案如下: 这取决于模块的结构。如果它的安装脚本调用编译器,那么它会调用。因为,你看,默认情况下 pip 模块不包含编译部分,由模块作者提供它们。