【问题标题】:python cx_oracle module not working in PyCharm (with anaconda), but it does with command linepython cx_oracle 模块在 PyCharm 中不起作用(使用 anaconda),但它在命令行中起作用
【发布时间】:2016-10-21 15:31:14
【问题描述】:

我正在尝试解决一个让我发疯的 PyCharm 问题。我希望我能在这里得到一些帮助。

我在 mac os 上使用 python 3.5 运行 anaconda。我需要使用 oracle 数据库,并且我已经使用带有“pip install”的官方说明安装了 cx_Oracle 包。 我写了一段代码来测试与数据库的连接。如果我从命令行运行代码,它工作正常,但 PyCharm 似乎不喜欢它。 GUI 似乎找不到包,因为导入下方有一条红线,上面写着“没有名为 cx_Oracle 的模块”。但我可以在“设置->项目->项目解释器”中找到与其他包一起列出的模块。如果我仍然运行它,在 PyCharm 中,我会收到以下错误:

import cx_Oracle ImportError: dlopen(/Users/myuser/anaconda/lib/python3.5/site-packages/cx_Oracle.cpython-35m-darwin.so, 2): Library not loaded: @rpath/libclntsh.dylib.12.1 Referenced from: /Users/myuser/anaconda/lib/python3.5/site-packages/cx_Oracle.cpython-35m-darwin.so Reason: image not found

项目解释器与我在命令行中使用的解释器相同,我已经使用“which”命令进行了检查。

sys.executable、os.getcwd() 和 sys.pat 在 PyCharm 和命令行中都是相同的。 唯一的区别似乎在于 os.environ。为了让 cx_Oracle 插件从命令行工作,我必须设置两个环境变量 DYLD_LIBRARY_PATH 和 LD_LIBRARY_PATH。如果我不设置这些,我也会在命令行中遇到同样的错误。因此,在 PyCharm 中,我在 python 脚本的开头添加了以下几行。

os.environ["DYLD_LIBRARY_PATH"]="/path/to/my/library"
os.environ["LD_LIBRARY_PATH"]="/path/to/my/library"

不幸的是,如果我从 PyCharm 运行代码,我仍然会收到错误消息。

【问题讨论】:

    标签: macos python-3.x pycharm anaconda cx-oracle


    【解决方案1】:

    我通过以下 cmd 解决了类似的问题:

    ln -s /opt/oracle/instantclient_12_1/libclntsh.dylib.12.1 /usr/local/lib/libclntsh.dylib.12.1

    【讨论】:

      【解决方案2】:

      您需要确保 DYLD_LIBRARY_PATH/LD_LIBRARY_PATH 指向找到 Oracle 客户端库 (libclntsh) 的位置。由于 PyCharm 正在加载它,因此您需要确保在启动 PyCharm 之前设置这些环境变量,因为它们在进程启动时不会生效除了

      另一个选项是在构建和安装 cx_Oracle 之前将环境变量 FORCE_RPATH 设置为某个值。这将消除在运行时设置 DYLD_LIBRARY_PATH 和 LD_LIBRARY_PATH 环境变量的需要。

      【讨论】:

      • 感谢安东尼的评论。是的,他们指向正确的路径,事实上,如果我不使用 pycharm,并且我从命令行启动脚本,它确实可以工作。
      • 我通过在我需要运行的每个 python 脚本的编辑配置 -> 环境变量中添加 DYLD_LIBRARY_PATH/LD_LIBRARY_PATH 来解决这个问题。但这是一个非常不优雅的解决方案,因为我必须对每个脚本都这样做。如果我在主配置设置中设置它们,它就不起作用。
      • 你能推荐一个比我破解的更好的解决方案吗?
      • 你能从你知道变量设置正确的命令行运行 PyCharm 吗?
      • 首先确定 cx_Oracle 正常工作后,找出将启动 PyCharm 并从 shell 执行它的命令。
      猜你喜欢
      • 2017-04-25
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      相关资源
      最近更新 更多