[英]Python import error on Windows: no __path__
OK,嘗試查找運行Python軟件包的問題。
在Windows上運行。
計算機上僅安裝了一個版本的Python:3.4.3
已安裝軟件包(軟件包名稱:Willie)(安裝細節比平時更復雜;如有必要,可以提供步驟)
軟件包安裝在: C:\\Python34\\Lib\\site-packages\\willie
啟動腳本是: C:\\Python34\\Scripts\\willie.py
錯誤是腳本的第一行:
from willie.tools import stderr
如果我從命令行運行willie.py,則會收到此錯誤:
Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 2218, in _find_and_load_unlocked
AttributeError: 'module' object has no attribute '__path__'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Python34\Scripts\willie.py", line 15, in <module>
from willie.tools import stderr
File "C:\Python34\Scripts\willie.py", line 15, in <module>
from willie.tools import stderr
ImportError: No module named 'willie.tools'; 'willie' is not a package
使用import
功能時, 應該自動設置__path__
屬性,但該屬性不存在,從而導致程序無法執行。
C:\\Python34\\Scripts;
在我的Path
環境變量中。
已為C:\\Python34;
所有內容設置了PYTHONPATH
C:\\Python34;
到C:\\Python34;C:\\Python34\\Lib;C:\\Python34\\Lib\\site-packages;C:\\Python34\\Lib\\site-packages;C:\\Python34\\Lib\\site-packages\\willie;C:\\Python34\\Lib\\site-packages\\willie\\tools;
。
在所有帶有這些目錄的情況下,如果我嘗試從交互式Python提示符下執行上述導入命令,則該命令將正確運行。 我可以使用stderr
函數,並檢查其__file__
和__path__
字段。
如果我添加C:\\Python34\\Scripts;
到PYTHONPATH
,但是,我在命令行中得到了與使用它相同的錯誤: __path__
不存在,'willie'不是一個軟件包。
我確實知道willie.py會以某種方式遞歸調用,因為我可以在運行兩次的文件頂部添加一個print()。
在尋找如何進行此操作方面尋求幫助。 幾乎可以肯定,這是我的配置問題,但是我不知道該如何解決。
首先,您絕對不要在PYTHONPATH
c:\\Python34\\Scripts
。 \\Scripts
下的文件不是可導入的。
其次, willie
一些修改,以確保將willie.py
安裝到c:\\Python34\\Scripts\\willie
(請注意,沒有.py
后綴)。 這絕對是非標准的。 甚至可行的唯一原因是因為在Unix機器上,該文件的第一行是一個特殊的“ shebang”,它告訴Unix程序啟動器使用Python執行該文件。 Windows沒有等效功能-將文件willie
命名為.py
意味着您根本無法執行它。
因此,看起來willie
模塊根本不准備在Windows系統上安裝。 ( #811和#822均指Windows上由非標准軟件包設置引起的怪異。)
標准軟件包設置將在willie
軟件包內將willie.py
設為willie/main.py
並在軟件包的setup.py
willie.main
注冊為名為willie
的“入口點”。 當使用pip
安裝軟件包時,此咒語將在Windows系統上創建c:\\Python34\\Scripts\\willie.exe
。
我相信進行遞歸導入的原因是因為sys.path
的第二個條目是從命令行運行的腳本的名稱。 因此,當它查找模塊willie
而不是所需模塊時,總會找到C:\\Python34\\Scripts\\willie.py
。
解決方法是,您可以嘗試將C:\\Python34\\Scripts\\willie.py
重命名為C:\\Python34\\Scripts\\run-willie.py
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.