【问题标题】:Cannot import files generated with f2py using Eclipse on Windows无法在 Windows 上使用 Eclipse 导入使用 f2py 生成的文件
【发布时间】:2014-12-12 15:04:54
【问题描述】:

我有一些在 Linux 中开发的 Python 代码(使用 Eclipse 和 Pydev),这些代码可以回忆起使用 f2py 生成的一些模块(扩展名为“*.so”),这些模块可以在这个操作系统上完美执行。现在我也需要在 Windows 上运行它们,但我发现了一些困难。

当我在 Windows 上运行不需要这些模块的 Python 代码时,一切正常。但是如果我需要导入它们(例如,“import WHATEVER”,即 WHATEVER.so 使用 f2py 生成的文件),我会收到错误“ImportError: No module named WHATEVER”。这些模块与主 Python 文件位于同一路径中(即在 /projectname/src/ 中)。我检查了 PYTHONPATH 并没有发现任何问题(这条路径已经在其中)。

我也尝试使用 Python 的命令窗口导入它们,发现完全相同的问题。即使在正确的目录中查找,它似乎也无法打开这些文件。谁能弄清楚我忘记了什么?

提前致谢。

【问题讨论】:

    标签: python windows import f2py


    【解决方案1】:

    f2py 在 Linux 上生成的 .so 文件是 Linux 特有的,不能在其他操作系统上运行。这就是为什么你不能在 Windows 上运行 Linux 二进制程序,或在 Linux 上运行 Windows .exes - 格式完全不同。为了在 Windows 上使用您的库,您需要在 Windows 上编译它们以生成 .dll 文件。 gcc/gfortran 和其他可用于 Windows 的几个不同发行版。我个人更喜欢Cygwin,因为它的包管理器/安装程序非常简单。

    【讨论】:

    • 当然,既然您说程序不会在 Windows 下使用 fortran 库,您可以简单地将它们的导入设置为条件,将所有导入语句本身放在 try: ... except ImportError: pass 子句中。
    【解决方案2】:

    正如 MattDMo 所评论的,使用 dll 是一个非常好的建议。然而,这意味着使用ctypes,当 Fortran 子例程返回多个变量时,这会变得有点棘手(至少,对于像我这样的新手来说)。另一个对我来说非常好用的选项是让 f2py 生成扩展名为“.pyc”而不是之前的“.so”的文件。为此,一切都得到了很好的解释here。这样做的好处是我不需要修改我在 Linux 环境中完成的代码,并且仍然可以在 windows 中运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多