我已经能够在我的Windows 8笔记本电脑上成功安装cx_Oracle以用于Python 3.4,而我现在正试图在Linux机器上获得相同的设置(使用Python 3.4的cx_Oracle)。从cx_Oracle-5.1.3.tar.gz运行setup.py文件时,我最终得到了这个错误:
sudo python3 setup.py install
Traceback (most recent call last):
File "setup.py", line 135, in <module>
raise DistutilsSetupError("cannot locate an Oracle software " \
distutils.errors.DistutilsSetupError: cannot locate an Oracle software installation
我看了一些其他答案(easy_install cx_Oracle (python package) on Windows,https://gist.github.com/jarshwah/3863378)我安装了这3个即时客户端rpms:
rpm -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.i386.rpm
rpm -ivh oracle-instantclient12.1-devel-12.1.0.2.0-1.i386.rpm
rpm -ivh oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.i386.rpm
然后我将ORACLE_HOME设置为它们安装到的文件夹,这应该有助于python识别oracle文件的位置,以便它可以正确安装。
每次尝试运行setup.py文件时,我仍然会遇到“无法找到Oracle软件安装”的错误。
知道我需要做些什么才能成功安装cx_oracle?
更新以获取更多信息:
echo $ ORACLE_HOME返回/instantclient_12_1
,这是安装rpm文件的位置。
这是我/ instantclient_12_1目录的内容:
adrci libnnz12.so libsqlplusic.so tnsnames.ora
BASIC_README libocci.so libsqlplus.so tnsnames.ora_andy
genezi libocci.so.12.1 ojdbc6.jar uidrvci
glogin.sql libociei.so ojdbc7.jar xstreams.jar
libclntshcore.so.12.1 libocijdbc12.so sdk
libclntsh.so libons.so sqlplus
libclntsh.so.12.1 liboramysql12.so SQLPLUS_README
这与我安装Windows 8的目录略有不同 - 该目录包含.dll
和.sym
个文件,例如orasql12.dll
。 Linux版本的即时客户端安装是否应该有不同的文件?
使用部分解决方案进行更新:
我找到了一个正确安装cx_Oracle的解决方案,但仅限于该shell实例:
我设置了这两个环境变量:
export ORACLE_HOME=/instantclient_12_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
然后我创建了一个符号链接:
ln -s libclntsh.so.12.1 libclntsh.so
之后,转到cx_oracle
文件夹并执行此操作:
python3 setup.py build
python3 setup.py install
出于某种原因,sudo python3 setup.py install
无效。
更新并提供相关问题的链接:
我的下一个问题是让环境变量在shell实例之外持久化,所以我不必每次都定义环境变量。我在profile.d中放置的环境变量在我回显它们时出现,但是python无法正确导入cx_oracle,并且由于某种原因我必须再次导出环境变量。我不知道发布与之相关的其他问题的正确程序,所以我在这里开了一个新问题:
Linux profile.d environment variables don't work with cx_oracle in Python
请帮我解决这个问题,我觉得完全不知道该怎样才能让它发挥作用。当我回显它们时,环境变量会显示出来,但是如果我在运行python代码之前再次导出它们,它们似乎只能起作用。
答案 0 :(得分:4)
<强>更新强>
作为Petriborg suggested,在构建时设置Option Explicit
Sub bar()
Dim ie As New InternetExplorer
Dim doc As HTMLDocument
Dim result As IHTMLElement
Dim result2 As IHTMLElement
Dim item As String
Dim lRow As Long
ie.Visible = True
lRow = 2
item = Sheet1.Range("A" & lRow).Value
Do Until item = ""
ie.navigate "http://www.buyshedsdirect.co.uk/" & item
Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE
Set doc = ie.document
Set result = doc.querySelector(".VariantPrice")
Set result2 = result.querySelector(".NowValue")
Sheet1.Range("B" & lRow).Value = result2.innerText
lRow = lRow + 1
item = Sheet1.Range("A" & lRow).Value
Loop
ie.Quit
End Sub
将包括安装期间构建的LD_RUN_PATH
共享库中Oracle共享库文件的路径。这就像我在第一个答案中所建议的那样,不需要cx_Oracle
。
对于您使用的RPM,LD_LIBRARY_PATH
应设置为ORACLE_HOME
。如果您使用/usr/lib/oracle/12.1/client
:
pip
阅读此documentation以获取有关安装和执行使用客户端库的应用程序的一些信息。
答案 1 :(得分:0)
当我尝试在Ubuntu 16.04中使用python 2.7.12和Oracle客户端12.1.0.2单独安装带有LD_LIBRARY_PATH变量的cx_Oracle时,pip安装失败并且正在查找Oracle 12.1.0.2客户端不再提供的头文件。它适用于LD_RUN_PATH