我在使用setuptools在本地编写和安装的软件包中导入模块时遇到问题。我似乎最终得到一个空包,除非我在我的__init__.py
中明确导入模块,即使这样,它只会导入东西,如果我cd
'进入包的源目录。
这是我的包结构
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
一级,我会遇到同样的问题。
$ cd ..
$ python
>>> import foo
>>> dir(foo)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
>>> foo.moduleA
AttributeError: 'module' object has no attribute 'moduleA'
我尝试寻找相关问题,但没有运气。我怀疑这是一个小错误,或者我完全以错误的方式解决这个问题。我会感激一些帮助。感谢。
答案 0 :(得分:0)
我想我有个主意!
因为你已经编写了一个模块,你可以导入它。很清楚。但是python不能将模块中的脚本解释为属性。你是这样称呼的:
foo.moduleA
此外,moduleA .py 不是属性,它是一个程序。 如果您在moduleA .py !
中编写属性代码,那么您的代码可以正常工作像这样可以将一些代码作为项目中的属性代码获取!
我希望我能帮到你!
h_e_u_r_e_k_a
编辑:
这是moduleA.py中的代码(例如,这是答案代码:)
def myfunctioninA():
print('Spam')
print('test')
如果您在其他文件中导入它,请执行以下操作:
foo.myfunctioninA()
它会打印Spam
和test
模块的名称应与包不同。