包导入创建一个模块,子模块仍然可导入

时间:2015-04-01 15:19:59

标签: python import rpm distutils setup.py

我一直在研究python包,现在我想把它变成一个小的RPM发行版。包中包含一些模块,其中一个模块是可执行的。我可以使用python setup.py bdist_rpm创建RPM-package并将其安装在带有rpm的fedora包装盒上。

此时拥有所需的命令myscript,它就像一个魅力。但是当我尝试在ipython中导入包时,我遇到了一些奇怪的事情。我可以做以下

from myscript import sdf
import myscript.mol2

两者都完美无缺,但

import myscript
myscript.sdf

引发

AttributeError: 'module' object has no attribute 'sdf'

我已经使用了一段时间但现在无济于事。有很多关于进口问题的问题,但我还没有找到答案。

我应该做些什么才能让它发挥作用?

当前的文件夹结构是:

myscript/  #project root
  setup.py
  src/
    myscript/
      __init__.py
      functions.py
      sdf.py
      mol2.py
      runner.py
  bin/
    myscript  #symbolic link to src/myscript/runner.py

setup.py是:

from distutils.core import setup
setup(name = 'myscript',
      version = '0.75',
      author ='me',
      requires = ['numpy'], 
      packages = ['myscript'],
      package_dir = {'myscript':'src/myscript'},
      scripts = ['bin/myscript']
      )

__init__.py是:

__all__ = ['functions','sdf','mol2','runner']

1 个答案:

答案 0 :(得分:1)

This is normal behavior.如果要导入子模块,则必须在模块中导入它们。

# myscript/__init__.py

from . import sdf