cx_Oracle pip安装失败:oci.h:没有这样的文件或目录

dmv*_*nna 6 python pip

我在这一点上有点失落.我还尝试安装一个旧版本的cx_Oracle,我已经安装在一个单独的virtualenv中,但它也在同一个地方失败并出现相同的错误消息.

$ pip install cx_Oracle
(...)

cx_Oracle.c:10:17: error: oci.h: No such file or directory
cx_Oracle.c:11:18: error: orid.h: No such file or directory
cx_Oracle.c:12:16: error: xa.h: No such file or directory

error: command 'gcc' failed with exit status 1
(...)
----------------------------------------
Cleaning up...
Command /R/.virtualenv/myenv/bin/python -c "import setuptools, tokenize;__file__='/R/.virtualenv/myenv/build/cx-Oracle/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-g5eyNG-record/install-record.txt --single-version-externally-managed --compile --install-headers /R/.virtualenv/myenv/include/site/python2.7 failed with error code 1 in /R/.virtualenv/myenv/build/cx-Oracle
Traceback (most recent call last):
  File "/R/.virtualenv/myenv/bin/pip", line 11, in <module>
    sys.exit(main())
  File "/R/.virtualenv/myenv/lib/python2.7/site-packages/pip/__init__.py", line 185, in main
    return command.main(cmd_args)
  File "/R/.virtualenv/myenv/lib/python2.7/site-packages/pip/basecommand.py", line 161, in main
    text = '\n'.join(complete_log)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 70: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

完整的错误日志

小智 12

即使安装了Oracle即时客户端,并且在设置$ ORACLE_HOME和$ LD_LIBRARY_PATH以包含客户端的路径之后,我遇到了类似的错误,尝试pip install cx_oracle.

听起来好像您可能已经安装了Instant Client,而不是Instant Client SDK.SDK是一个单独的下载/安装,并且cx_oracle似乎需要两者,因为缺少的包括('oci.h'和所有其余的)都位于SDK中.

如果您还没有访问过,可以在此处找到Oracle Instant Client/SDK下载页面:

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

假设您已经下载并安装了适合您平台的客户端,例如:

oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.zip

您还需要下载并安装相应的SDK,例如:

oracle-instantclient11.2-sdk-11.2.0.1.0-1.x86_64.zip

只要SDK安装在ORACLE_HOME和LD_LIBRARY_PATH路径的某个位置,就应该解析包含.

  • “只要 SDK 安装在 ORACLE_HOME 路径上的某处”是我的问题的关键。谢谢 (2认同)

小智 6

问题在于 bschulz 指出的 SDK 不存在。我能够按照以下步骤解决问题:

  1. 下载并安装/解压缩 $ORACLE_HOME 中的“instantclient-basic”和“instantclient-sdk”。

    你可以从这里得到它们

  2. 设置 /etc/environment

    export ORACLE_HOME=/opt/oracle/instantclient_12_2
    export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
    cd $ORACLE_HOME
    unzip /sdk/ottclasses.zip
    cp -R ./sdk/* .
    cp -R ./sdk/include/* .
    ln -s libclntsh.so.12.1 libclntsh.so
    ln -s libocci.so.12.1 libocci.so
    
    Run Code Online (Sandbox Code Playgroud)

现在运行 pip install cx_Oracle==5.3

我遵循了这些,它成功地为我安装了 5.3。

您可能需要安装一些额外的依赖项,如您应该下载/安装的软件包的文档中所列。

  • 欢迎来到[so],很棒的帖子!SO 有很多很棒的格式可用。使用编辑按钮查看我如何更改您的帖子。 (2认同)