Python - 每当我尝试运行程序“无法找到模块”时出错

时间:2014-10-17 00:13:11

标签: python python-3.x pycharm libtcod

我正在尝试做这个小教程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 :(得分:1)

我假设您还将libtcod-VS.dlllibtcod-mingw.dll复制到了项目目录,而不仅仅是libtcodpy.py。还有SDL.dllarial10x10.png。如果没有,请返回并再次查看Setting it up说明。

但如果你有,这不是你的错,而是他们的错。

libtcodpy.py尝试从当前工作目录导入libtcod-VS.dlllibtcod-mingw.dll DLL。你可以从这一行看到:

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

因此,如果当前工作目录恰好是libtcodpy.py所在目录以外的任何目录,那么它就不会在那里找到它们。

这是一件很愚蠢的事情。如果您执行Choice of code editor部分建议并始终从控制台运行脚本(&#34; DOS提示符&#34;),它将起作用(只要您始终在没有明确的路径),但他们真的不应该依赖它。

不过,这显然是最简单的解决办法:从控制台运行程序,他们期待你的方式,而不是来自PyCharm。


或者,您可以将PyCharm配置为以项目目录作为工作目录来运行项目。

有几种方法可以设置它,但您可能需要的是“运行/调试配置”对话框(可以在“运行”菜单上的“编辑配置...”下找到)。打开该对话框,打开显示三角形为Defaults,单击Python,然后查找&#34;工作目录:&#34;在右边。点击按钮,然后选择您的项目目录(或放置libtcod-VS.dlllibtcod-mingw.dll)。


或者您可以编辑libtcodpy.py以使其在自身旁边查找DLL,而不是在当前工作目录中查找。您只需要进行4次小改动。

首先,在靠近顶部的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'))

答案 1 :(得分:0)

我自己一直在努力解决同样的问题,尽管我使用的是Emacs和Python 2.7。

解决了我的问题是安装了32位python而不是64位python。 libtcod中的.dll是32位,Windows上的64位python与32位.dll不兼容。

另外,你可能想检查一下libtcod是否与python 3兼容。我找到了两个讨论主题的地方,但我不知道libtcod-1.5.1是否与后来的3.xs兼容。

我还建议尝试运行libtcod文件夹中的samples_py.py来测试这两个问题,就像运行它是你的文件夹设置或路径,而不是你的python版本。