2

我正在尝试安装我创建的一个简单的 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(),
)

我想我只是错过了一些东西,但我一直在浏览文档但还没有找到。谢谢。

4

3 回答 3

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
于 2011-04-28T16:28:51.430 回答
1

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

import bar

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

否则,使用

import foo.bar
于 2011-04-28T16:29:59.920 回答
1

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

于 2011-04-28T16:27:37.927 回答