Python 认为我 setup.py 创建的包是一个模块而不是 python 包
Python thinks my setup.py created package is a module not a python package
我正在使用 setup.py
创建一个包 foo
,然后在新的虚拟环境 (python 2.7) 中使用 pip install .
在本地安装它。在虚拟环境的 python 解释器中,我可以导入 foo
,但是 python 似乎认为 foo
比 python 包更像是一个模块(包使用 __init__.py
文件)因为当我尝试调入 foo
的子结构时,foo.bar
,它给我一个关于模块没有 bar
属性的错误。
例如,我可以毫无问题地导入 foo
,但如果我尝试调用任何关闭 foo
,它会失败并显示错误消息:
>>> import foo
>>> foo.bar
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'bar'
文件夹结构如下:
foo/
foo/
__init__.py
bar.py
setup.py
这是我的 setup.py
文件:
from setuptools import setup
setup(
url='none',
author='loren',
name='foo',
version='1.0.0',
packages=['foo'],
)
有趣的是,我可以使用 from foo import bar
导入 bar 不仅可以,而且还可以修复我的上述错误并进一步调用 foo.bar
返回 bar
模块,但是对我不是很有用。
我需要做什么才能得到
>>> import foo
>>> foo.bar
能正常工作吗?
原来我不明白 Python __init.__.py
包的导入是如何工作的。当我导入顶级 foo
包时,我认为包的所有底层子模块(如 bar
)都已导入,但事实并非如此。 Python 不会故意导入子模块以防止加载我可能不会使用的东西,尤其是在大包中。
如果我想做类似的事情:
>>> import foo
>>> foo.bar
然后我需要做的就是 import bar
在 foo
模块的 __init__.py
文件中。
我还了解到所有的包都是模块,(虽然不是所有的模块都是包)所以这就是为什么我的错误是抱怨模块没有属性。
我正在使用 setup.py
创建一个包 foo
,然后在新的虚拟环境 (python 2.7) 中使用 pip install .
在本地安装它。在虚拟环境的 python 解释器中,我可以导入 foo
,但是 python 似乎认为 foo
比 python 包更像是一个模块(包使用 __init__.py
文件)因为当我尝试调入 foo
的子结构时,foo.bar
,它给我一个关于模块没有 bar
属性的错误。
例如,我可以毫无问题地导入 foo
,但如果我尝试调用任何关闭 foo
,它会失败并显示错误消息:
>>> import foo
>>> foo.bar
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'bar'
文件夹结构如下:
foo/
foo/
__init__.py
bar.py
setup.py
这是我的 setup.py
文件:
from setuptools import setup
setup(
url='none',
author='loren',
name='foo',
version='1.0.0',
packages=['foo'],
)
有趣的是,我可以使用 from foo import bar
导入 bar 不仅可以,而且还可以修复我的上述错误并进一步调用 foo.bar
返回 bar
模块,但是对我不是很有用。
我需要做什么才能得到
>>> import foo
>>> foo.bar
能正常工作吗?
原来我不明白 Python __init.__.py
包的导入是如何工作的。当我导入顶级 foo
包时,我认为包的所有底层子模块(如 bar
)都已导入,但事实并非如此。 Python 不会故意导入子模块以防止加载我可能不会使用的东西,尤其是在大包中。
如果我想做类似的事情:
>>> import foo
>>> foo.bar
然后我需要做的就是 import bar
在 foo
模块的 __init__.py
文件中。
我还了解到所有的包都是模块,(虽然不是所有的模块都是包)所以这就是为什么我的错误是抱怨模块没有属性。