背景
我做的__file__
屬性從docs (scroll down to 'modules')是如何工作的一些研究,以及各種網站。進口第三方模塊沒有__file__屬性
據我所知,所有的python模塊只要從文件中加載就應該具有__file__
屬性。
我使用
(env)$ pip install opencafe
安裝第三方Python模塊opencafe
我利用這種測試框架的問題。
從CLI運行測試命令時會出現此問題。當該命令運行時,它會觸發此文件:env/lib/python2.7/site-packages/cafe/configurator/managers.py
。
在這一文件中,有
import cafe
,後來
_PLUGIN_DIR = os.path.join(os.path.dirname(cafe.__file__), 'plugins')
當這個文件運行時,會出現此錯誤:
AttributeError: 'module' object has no attribute '__file__'
在這種情況下發生同樣的錯誤:
(env) $ pip install opencafe
Collecting opencafe
Using cached opencafe-0.3.1-py2.py3-none-any.whl
Installing collected packages: opencafe
Successfully installed opencafe-0.3.1
(env) $ python
Python 2.7.10 (default, Jul 30 2016, 18:31:42)
>>> import cafe
>>> cafe.__file__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute '__file__'
個
我的思想
我的自然傾向是隻認爲這是一個問題與opencafe
本身,因爲我只安裝了框架和運行從CLI測試命令。
但是,我想知道安裝到虛擬環境或PYTHONPATH中是否存在問題。
該文檔明確指出:「對於靜態鏈接到解釋器的C模塊,__file__
屬性不存在」。這個模塊是一個本地安裝的python模塊。它沒有鏈接到像sys
模塊這樣的解釋器。
[編輯]
這裏是關於命名空間的包一些更多的好信息。
http://chimera.labs.oreilly.com/books/1230000000393/ch10.html#_discussion_172
如果包作爲一個命名空間包檢查其
__file__
的屬性,你可以告訴的主要途徑。如果完全缺失,該包是一個命名空間。
最後更新
事實證明,opencafe
不與virtualenv
最新版本。它只適用於版本15.0.1
或更早版本。恢復回去擺脫了這個錯誤消息對我來說。
安裝此版本時,在virtualenv的軟件包中創建了一個__init__.pyc
文件。這個字節編譯是如何得到它的信息__file__
。
既然如此,你會說這個問題確實與opencafe本身有關,因爲它在其自己的模塊之一中調用cafe .__ file__。除了每次安裝操作該行外,是否還有其他解決方法? – gliemezis
@gliemezis:它呢?奇怪的。我不認爲它應該這樣做。 – user2357112
是的[在這裏](https://github.com/openstack/opencafe/blob/master/cafe/configurator/managers.py#L613)。我同意這很奇怪。這不是最近的變化,但現在對我造成這個錯誤。 – gliemezis