簡體   English   中英

Windows上的Python導入錯誤:否__path__

[英]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.

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