2

我正在使用 Pydev 运行 Eclipse Juno。我编译了一个使用 ctypes 导入 C 库的 egg 包。它在终端上运行良好,但是当从 Eclipse 内部运行时,我得到

/usr/local/lib/python2.7/dist-packages/PhreeqPy-0.1.0-py2.7.egg/phreeqpy/iphreeqc
Traceback (most recent call last):
  File "/src/pywork/fddarcy/src/fddarcy.py", line 75, in <module>
    sys.exit(main())
  File "/src/pywork/fddarcy/src/fddarcy.py", line 35, in main
    freak  =phreeqc_mod.IPhreeqc()    
  File "/usr/local/lib/python2.7/dist-packages/PhreeqPy-0.1.0-py2.7.egg/phreeqpy/iphreeqc/phreeqc_dll.py", line 28, in __init__
    self.phreeqc = ctypes.cdll.LoadLibrary(dll_path)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 443, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: libimf.so: cannot open shared object file: No such file or directory

在 Pydev 中重新加载所有库后,Eclipse 在导入模块时甚至没有给出错误,但它不会加载模块。为了更加清楚,终端上的一切正常。

编辑:我认为问题在于 Eclipse 调用 python 的方式。它与从终端调用 python 的方式有什么不同吗?

干杯

4

2 回答 2

1

Eclipse 正在查看 ctypes 模块,只是 ctypes 找不到 DLL。

这样做的原因是 eclipse 不一定使用您系统的环境变量。要解决这个问题,您需要在 Eclipse 中设置 LD_LIBRARY_PATH。

第 1 步。找出“libimf.so”在您的系统上的位置。在 Linux 上,您可以使用:

 locate libimf.so

在一个终端。那应该给你目录。例如,假设文件位于 "/home/sweetlibraries/libimf.so" 。

步骤 2. 在 Eclipse* 中设置 LD_LIBRARY_PATH:

  • 右键单击您正在运行的出现此错误的 python 文件。
  • 点击“属性”
  • 单击“运行/调试设置”
  • 您应该看到该文件的一些配置。对我来说,它是“project_name python_file_name.py”。选择它。
  • 点击“环境”
  • 点击“新建”
  • 将名称设置为“LD_LIBRARY_PATH”
  • 将值设置为您找到 libimf.so 的任何位置,例如“/home/sweetlibraries/”
  • 单击“确定”以退出所有这些菜单。

现在,当您运行它时,它应该可以工作了。如果没有,请确保使用正确的“运行配置”。单击大的绿色“运行”箭头旁边的小向下箭头。并选择配置名称(例如“project_name python_file_name.py”)。

*我正在使用 LiClipse,但我认为菜单结构应该相同。

于 2013-11-26T17:20:08.853 回答
1

如果您还没有,您可能需要将它添加到 Eclipse 中的 PYTHONPATH。

窗口 -> 首选项 -> PyDev -> 解释器 - Python

添加您的 python.exe 或运行 autoconfig,然后添加您需要的库。

于 2012-10-24T16:25:18.827 回答