setup.py导入无法正常工作

时间:2011-04-28 16:08:48

标签: python import 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 个答案:

答案 0 :(得分:1)

您的foo是一个软件包,软件包不会自动导入模块。你必须明确地做。这就是Python的工作原理。您也可以执行import foo.bar并参考foo.bar

答案 1 :(得分: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

答案 2 :(得分:1)

如果你想做这样的事情,你必须填写foo / __ init__.py:

import bar

然后,在导入foo时,您将能够使用foo.bar

否则,请使用

import foo.bar