Python setuptools 开发命令:“没有名为...的模块”

Tim*_*ton 6 python setuptools

我正在尝试安装我使用setuptools的develop命令开发的python包。

[旁注:网络上有大量关于此的信息(distutils、distutils2、setuptools、distribute)。据我所知,setuptools和develop是使用正在开发的代码的最现代/最佳实践方法。也许我错了。]

这就是我所做的:

(1) 我在包含 Python 代码的目录中放置了一个空的 __init__.py。

(2)我做了一个setup.py:

from setuptools import setup, find_packages
setup(name = "STEM_pytools",
      version = "0.1",
      packages = find_packages(),

      author = "Timothy W. Hilton",
      author_email = "my@email.address",
      description = "visualization and data pre-/post-processing tools for STEM",
      license = "",
      keywords = "STEM",
      url = "")
Run Code Online (Sandbox Code Playgroud)

(3)我跑了

python setup.py develop
Run Code Online (Sandbox Code Playgroud)

这似乎进展顺利。

但是,当我尝试使用该包时,我得到:

>>> import STEM_pytools
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named STEM_pytools
Run Code Online (Sandbox Code Playgroud)

安装命令也会发生同样的情况:它的输出看起来不错,然后是“没有名为 STEM_pytools 的模块”。我正在撕扯我的头发。任何建议表示赞赏!

Tim*_*ton 4

我解决了这个问题,尽管我仍然不完全明白为什么它现在有效而以前不起作用。看来我的 setup.py 和我的项目的目录结构没有成功交互。

这是与我的 setup.py 一起使用的目录结构:

STEMpytools/
    setup.py
    stem_pytools/
        __init__.py
        source1.py
        source2.py
        ...
        sourceN.py
Run Code Online (Sandbox Code Playgroud)

这个目录结构不起作用,至少在与我的 setup.py 配合使用时:

STEMpytools/
    setup.py
    __init__.py
    source1.py
    source2.py
    ...
    sourceN.py
Run Code Online (Sandbox Code Playgroud)

这个解释对我帮助很大:http://bashelton.com/2009/04/setuptools-tutorial/
现在,从 python 解释器中,这些都可以工作:

import stem_pytools
import stem_pytools.source1
Run Code Online (Sandbox Code Playgroud)

在我的系统上进行的实验表明,有必要将 __init__.py 和包源代码放置在包含 setup.py 的根目录下一级的子目录中。我从 setuptools 和 distutils 文档中不确定为什么会出现这种情况。