Python setuptools develop命令:出现“No module named...”

6 投票
1 回答
2509 浏览
提问于 2025-04-18 01:46

我正在尝试安装我自己开发的一个Python包,使用的是setuptools的开发命令。

[顺便说一下:网上关于这个话题的信息实在是太多了(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 = "")

(3) 我运行了

python setup.py develop

这个过程似乎没有问题。

但是,当我尝试使用这个包时,我得到了:

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

使用安装命令时也是同样的情况:输出看起来没问题,但却显示“No module named STEM_pytools”。我快要抓狂了。任何建议都非常感谢!

1 个回答

4

我解决了这个问题,虽然我现在还是不太明白为什么现在能工作而之前不行。看起来是我的setup.py文件和项目的文件夹结构没有很好地配合。

这是我用的有效的文件夹结构:

STEMpytools/
    setup.py
    stem_pytools/
        __init__.py
        source1.py
        source2.py
        ...
        sourceN.py

这个文件夹结构就不行,至少和我的setup.py搭配时不行:

STEMpytools/
    setup.py
    __init__.py
    source1.py
    source2.py
    ...
    sourceN.py

这个解释对我帮助很大:http://bashelton.com/2009/04/setuptools-tutorial/
现在,从Python解释器来看,这两种方式都能正常工作:

import stem_pytools
import stem_pytools.source1

我在系统上实验发现,必须把__init__.py文件和包的源代码放在一个比包含setup.py的根目录低一级的子文件夹里。我不太明白为什么setuptools和distutils的文档是这样说的。

撰写回答