setup.py 导入不正常
我正在尝试安装一个我自己创建的简单Python库,但我觉得可能漏掉了某个步骤。设置过程看起来没问题(或者至少是运行了),但是当我导入这个库时,它的表现并不是我预期的那样。
我的文件夹结构是这样的:
Foo/
setup.py
README.txt
LICENSE.txt
foo/
__init__.py
bar.py
我可以这样做:
>>> import foo
但是如果我尝试这样:
>>> foo.bar
我就会收到以下错误:
AttributeError: 'module' object has no attribute 'bar'
相反,如果我使用这个:
>>> from foo import bar
就不会出现任何错误。
这是我的setup.py文件:
from distutils.core import setup
setup(
name='Foo',
version='0.1.0',
author='ctrl-c',
author_email='10minutemail@10minutemail.com',
packages=['foo'],
license='LICENSE.txt',
description='Foo does bar.',
long_description=open('README.txt').read(),
)
我想我只是漏掉了什么,但我一直在查阅文档,还没有找到。谢谢。
3 个回答
1
你的 foo
是一个包,而包不会自动导入模块。你必须手动去导入。这就是Python的工作方式。你也可以使用 import foo.bar
来导入,然后就可以使用 foo.bar
了。
1
如果你想做这样的事情,你需要在 foo/__init__.py 文件里填入:
import bar
然后,当你导入 foo 的时候,你就可以使用 foo.bar 了。
否则,你可以使用:
import foo.bar
1
你的setup.py看起来没问题。你是怎么安装你的包的呢?比如说:
% cd Foo
% python setup.py install --root /tmp/fooroot
% PYTHONPATH=/tmp/fooroot python -c 'from foo import bar; print bar'
<module 'foo.bar' from 'foo/bar.py'>
如果你使用的是基于RPM的系统,你可以用这个命令来创建一个可安装的RPM包:
% python setup.py bdist_rpm
% sudo rpm -i dist/Foo-0.1.0-1.noarch.rpm
# now should be available to python globally
如果你希望bar
这个符号默认能作为foo
的一个属性被看到,可以这样做:
在foo/__init__.py
文件中:
import bar