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

标签 python import rpm distutils setup.py

我一直在研究一个 python 包,现在我想把它变成一个小的 RPM 发行版。软件包包括几个模块,其中一个是可执行的。我可以使用 python setup.py bdist_rpm 创建 RPM 包,并使用 rpm 将它安装在软呢帽上。

此时有了所需的命令 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']

最佳答案

This is normal behavior. 如果你想导入子模块,那么你必须在模块中导入它们。

# myscript/__init__.py

from . import sdf

关于python - 包导入创建一个模块,子模块仍然可导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29394676/

相关文章:

ubuntu - 如何在 Ubuntu 上安装 .rpm?

python - 如何自动为python中的类添加属性?

python - 在 Python 中什么时候应该使用、什么时候应该避免使用namedtuple?

python - 使用 itertools 创建选项矩阵

python - 在不知道存在多少文件的情况下加载 py 文件并在目录的 for 循环中对类执行某些操作?

c++ - OSX C++ Xcode : Pasting long input into console gives upside down question marks

python - 如何禁用 django 中的脆皮表单字段

python - 导入错误 : cannot import name suppress

centos - 无法搜索源 RPM - 它在 repo 上,为什么我找不到它

linux - 如何防止并行安装多个版本的 RPM?