我无法从使用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中写入属性代码”给出一些具体的例子吗? –