簡體   English   中英

Python-每當我嘗試運行程序“找不到模塊”時都會出錯

[英]Python - Getting error whenever I try to run program “Module cannot be found”

我正在嘗試做這個小教程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

謝謝

我假設您還將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放在libtcod-VS.dll libtcod-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'))

盡管我正在使用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版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM