我無法從使用setuptools本地編寫和安裝的軟件包中導入模塊。我似乎最終得到一個空的包,除非我明確地導入__init__.py
中的模塊,即使如此,它只會將包含cd
'的東西導入到包的源目錄中。安裝了python軟件包,內部源代碼目錄除外
這裏是我封裝結構
foo_project/
|-- setup.py
|-- foo/
|-- |-- __init__.py
|-- |-- moduleA.py
|-- |-- moduleB.py
|-- |-- ...
我使用virtualenvwrapper
,並要安裝在某些環境ENV
上面的包,並打算能夠導入模塊中的一些其他目錄foo_examples
。
首先,我的__init__.py
是空的。要安裝,我:
- 運行
workon ENV
激活虛擬環境 cd
到foo_project
- 運行
python setup.py install
包似乎已成功安裝;我甚至可以檢查~/.virtualenvs/ENV/lib/python3.4/site-packages
中的蛋,它似乎有所有正確的文件。
但是,當我嘗試導入模塊,它顯示爲空:
>>> import foo
>>> dir(foo)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
>>> foo.moduleA
AttributeError: 'module' object has no attribute 'moduleA'
但是,如果我明確地導入在__init__.py
我的模塊,它們成爲可訪問:
在__init__.py
:
from . import moduleA, moduleB, ...
然後:
from foo import moduleA
不會拋出錯誤,但只有當我還在包源目錄中。如果我升一級,我會遇到同樣的問題。
$ cd ..
$ python
>>> import foo
>>> dir(foo)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
>>> foo.moduleA
AttributeError: 'module' object has no attribute 'moduleA'
我試過尋找相關的問題,但沒有運氣。我懷疑這可能是一個小小的錯誤,或者我完全用錯誤的方式去做。我會很感激一些幫助。謝謝。
恐怕你的回答不清楚。你可以通過「在moduleA.py中寫入屬性代碼」給出一些具體的例子嗎? –