Python - 运行程序时总是出现错误“找不到模块”

0 投票
2 回答
3948 浏览
提问于 2025-04-28 01:16

我正在尝试做一个小教程,链接在这里:http://www.roguebasin.com/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod,_part_1

在页面往下翻一点,看到“移动”的部分之前,有一句话提到要测试一下你目前的进展。我正在用Pycharm,这是我第一次使用外部库,或者你可以叫它其他名字。

这是我目前的代码,和他们的示例完全一样:

import libtcodpy as libtcod

#actual size of the window
SCREEN_WIDTH = 80
SCREEN_HEIGHT = 50

LIMIT_FPS = 20  #20 frames-per-second maximum


libtcod.console_set_custom_font('terminal.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD)

libtcod.console_init_root(SCREEN_WIDTH, SCREEN_HEIGHT, 'python/libtcod tutorial', False)

libtcod.sys_set_fps(LIMIT_FPS)

while not libtcod.console_is_window_closed():

    libtcod.console_set_default_foreground(0, libtcod.white)

    libtcod.console_put_char(0, 1, 1, '@', libtcod.BKGND_NONE)

    libtcod.console_flush()

每次我运行它时,都会出现这个错误。

Traceback (most recent call last):
  File "D:\Programming\Project 1\Rogue Like\libtcodpy.py", line 57, in <module>
    _lib = ctypes.cdll['./libtcod-mingw.dll']
  File "C:\Python34\lib\ctypes\__init__.py", line 426, in __getitem__
    return getattr(self, name)
  File "C:\Python34\lib\ctypes\__init__.py", line 421, in __getattr__
    dll = self._dlltype(name)
  File "C:\Python34\lib\ctypes\__init__.py", line 351, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "D:/Programming/Project 1/Rogue Like/firstrl.py", line 1, in <module>
    import libtcodpy as libtcod
  File "D:\Programming\Project 1\Rogue Like\libtcodpy.py", line 60, in <module>
    _lib = ctypes.cdll['./libtcod-VS.dll']
  File "C:\Python34\lib\ctypes\__init__.py", line 426, in __getitem__
    return getattr(self, name)
  File "C:\Python34\lib\ctypes\__init__.py", line 421, in __getattr__
    dll = self._dlltype(name)
  File "C:\Python34\lib\ctypes\__init__.py", line 351, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found

谢谢!

暂无标签

2 个回答

0

我最近也遇到了同样的问题,不过我用的是Emacs和Python 2.7。

对我来说,解决这个问题的方法是安装一个32位的Python,而不是64位的。因为libtcod里的.dll文件是32位的,而在Windows上,64位的Python和32位的.dll文件不兼容。

另外,你可能还需要检查一下libtcod是否和Python 3兼容。我找到过两个地方讨论这个话题,但我不确定libtcod-1.5.1是否和后来的3.x版本兼容。

我还建议你试着运行libtcod文件夹里的samples_py.py来测试这两个问题。如果这个能运行,那说明问题出在你的文件夹设置或路径上,而不是你的Python版本。

1

我假设你已经把 libtcod-VS.dlllibtcod-mingw.dll 复制到了项目目录,而不仅仅是 libtcodpy.py。还有 SDL.dllarial10x10.png 也要一起复制。如果没有的话,建议你回去再看看 设置说明

不过如果你都做了,那就不是你的错,是他们的问题。

libtcodpy.py 会尝试从当前工作目录中导入 libtcod-VS.dlllibtcod-mingw.dll 这个DLL文件。你可以从这行代码看出来:

_lib = ctypes.cdll['./libtcod-mingw.dll']

所以,如果当前工作目录不是 libtcodpy.py 所在的目录,它就找不到这些文件。

这真是个愚蠢的设计。如果你按照 选择代码编辑器 部分的建议,从控制台(也就是“DOS提示符”)运行脚本,它就能正常工作(只要你不指定路径),但他们不应该依赖这个方法。

不过,最简单的解决办法就是:按照他们的预期,从控制台运行程序,而不是从PyCharm里运行。


另外,你也可以配置PyCharm,让它在项目目录下运行你的项目。

有几种方法可以设置这个,但你可能想用的是运行/调试配置对话框(可以在运行菜单的“编辑配置…”中找到)。打开这个对话框,展开默认设置的三角形,点击Python,然后在右边找到“工作目录:”。点击 按钮,选择你的项目目录(或者你放 libtcod-VS.dlllibtcod-mingw.dll 的地方)。


或者你可以编辑 libtcodpy.py,让它在自己所在的目录中寻找DLL,而不是在当前工作目录中。你只需要做四个小改动。

首先,在顶部的 import 语句中间,如果没有 import os,就加上它。

接下来,在 import 语句之后,添加以下内容:

modpath = os.path.dirname(os.path.abspath(__FILE__))

然后找到以 _lib = ctypes.dll 开头的两行(或者直接看回溯中的行号),并按如下方式修改:

_lib = ctyles.cdll(os.path.join(modpath, 'libtcod-mingw.dll'))

_lib = ctyles.cdll(os.path.join(modpath, 'libtcod-VS.dll'))

撰写回答