【问题标题】:install SWIG python package in windows在 Windows 中安装 SWIG python 包
【发布时间】:2025-12-19 05:00:12
【问题描述】:

我创建了一个测试 c dll,它导出一个我想公开给 python 绑定的函数。为此,我使用了 SWIG 的最新版本。编译成功后,SWIG 给我留下了一个 x.py 和一个 x.dll 文件。

现在我应该“导入”“包”。但是,无论我将这些文件复制到哪里,当我在 python 中键入“import x”时,我都会得到“ImportError: No module named 'x'”。

那么我如何在 python 中加载这样一个自定义创建的包?

我正在运行 windows 7 x64,带有 python 3.3 和最新的 SWIG。

谢谢

编辑:我们正在取得进展!我做了一些路径技巧,现在找到了模块,但是:

      File "C:\Python33\lib\imp.py", line 119, in load_source
        _LoadSourceCompatibility(name, pathname, file).load_module(name)
      File ".\_pt1.py", line 28, in <module>
        _pt1 = swig_import_helper()
      File ".\_pt1.py", line 24, in swig_import_helper
        _mod = imp.load_module('_pt1', fp, pathname, description)
      File "C:\Python33\lib\imp.py", line 180, in load_module
        return load_source(name, filename, file)
      File "C:\Python33\lib\imp.py", line 119, in load_source
        _LoadSourceCompatibility(name, pathname, file).load_module(name)
      File ".\_pt1.py", line 28, in <module>
        _pt1 = swig_import_helper()
      File ".\_pt1.py", line 24, in swig_import_helper
        _mod = imp.load_module('_pt1', fp, pathname, description)
      File "C:\Python33\lib\imp.py", line 180, in load_module
        return load_source(name, filename, file)
      File "C:\Python33\lib\imp.py", line 119, in load_source
        _LoadSourceCompatibility(name, pathname, file).load_module(name)
      File ".\_pt1.py", line 28, in <module>
        _pt1 = swig_import_helper()
      File ".\_pt1.py", line 24, in swig_import_helper
        _mod = imp.load_module('_pt1', fp, pathname, description)
      File "C:\Python33\lib\imp.py", line 180, in load_module
        return load_source(name, filename, file)
      File "C:\Python33\lib\imp.py", line 119, in load_source
        _LoadSourceCompatibility(name, pathname, file).load_module(name)
      File ".\_pt1.py", line 28, in <module>
        _pt1 = swig_import_helper()
      File ".\_pt1.py", line 24, in swig_import_helper
        _mod = imp.load_module('_pt1', fp, pathname, description)
      File "C:\Python33\lib\imp.py", line 180, in load_module
        return load_source(name, filename, file)
      File "C:\Python33\lib\imp.py", line 119, in load_source
        _LoadSourceCompatibility(name, pathname, file).load_module(name)
      File ".\_pt1.py", line 28, in <module>
        _pt1 = swig_import_helper()
      File ".\_pt1.py", line 24, in swig_import_helper
        _mod = imp.load_module('_pt1', fp, pathname, description)
      File "C:\Python33\lib\imp.py", line 180, in load_module
        return load_source(name, filename, file)
      File "C:\Python33\lib\imp.py", line 119, in load_source
        _LoadSourceCompatibility(name, pathname, file).load_module(name)
      File ".\_pt1.py", line 28, in <module>
        _pt1 = swig_import_helper()
      File ".\_pt1.py", line 24, in swig_import_helper
        _mod = imp.load_module('_pt1', fp, pathname, description)
      File "C:\Python33\lib\imp.py", line 180, in load_module
        return load_source(name, filename, file)
      File "C:\Python33\lib\imp.py", line 119, in load_source
        _LoadSourceCompatibility(name, pathname, file).load_module(name)
      File "<frozen importlib._bootstrap>", line 584, in _check_name_wrapper
      File "<frozen importlib._bootstrap>", line 1022, in load_module
      File "<frozen importlib._bootstrap>", line 1003, in load_module
      File "<frozen importlib._bootstrap>", line 560, in module_for_loader_wrapper
      File "<frozen importlib._bootstrap>", line 853, in _load_module
      File "<frozen importlib._bootstrap>", line 954, in get_code
      File "C:\Python33\lib\imp.py", line 106, in get_data
        return super().get_data(path)
      File "<frozen importlib._bootstrap>", line 1032, in get_data
    RuntimeError: maximum recursion depth exceeded while calling a Python object

pt1 是我的测试模块。

编辑2:

我已将所有文件上传到这里:(40kb) rghost.net/53170317

【问题讨论】:

  • 参见using distutils(SWIG 3.0 文档)。另请阅读Distributing Python ModulesPython Packaging User Gudie
  • 请说明您将文件放在哪里并尝试过,以及您是如何运行python的
  • 谢谢,这有帮助。我在文件中添加了前导下划线“_”。现在它们被找到了,但是由于递归错误而失败。我将日志粘贴到第一篇文章中。

标签: python python-3.x binding swig


【解决方案1】:

假设您有 foo.py、x.py 和 _x.dll,请尝试将它们都放在同一个文件夹中。然后,来自该文件夹的 python.exe foo.py(其中 foo.py 是导入 x 的模块)。发布您的问题中发生的情况。

更新:刚刚注意到 .\_pt1.py 导入。你能找到那个模块在哪里,看看它是否包含import x 或其他可能导致递归的可疑代码。

【讨论】:

  • 感谢您的回复,我越来越绝望了。 :( 当我按照您的描述进行操作时,我得到了与我的问题完全相同的导入递归错误。我已在此处上传所有文件:(40kb)rghost.net/53170317