【问题标题】:ModuleNotFoundError in Python 3.7.3 Setup.py PackagePython 3.7.3 Setup.py 包中的 ModuleNotFoundError
【发布时间】:2020-11-10 00:56:18
【问题描述】:

我有一个 Python 包,格式为:

mypackage
├── README.md
├── doc
│   └── README.md
├── examples
│   └── README.md
├── setup.py
└── src
    ├── __init__.py
    ├── core
    │   ├── __init__.py
    │   └── main.py
    └── test
        └── README.md

它有一个随附的 setup.py 文件:

import os
from setuptools import setup, find_packages


def read(fname):
    """
    Reads the README functions are prints them into the long_description in
    the setup routine.

    Parameters
    ----------
    fname : README file name

    Returns
    -------
    Rendered README

    """
    return open(os.path.join(os.path.dirname(__file__), fname)).read()


classifiers = [
    "Development Status :: 3 - Alpha",
    "Intended Audience :: Developers",
    "Programming Language :: Python",
]

def run_setup():
    """
    This functions holds the setup command. Rather than running setup directly,
    it is wrapped in a 'try-except' that will print out errors if they occur.
    """
    setup(
        name='My Package',
        version='0.1',
        description='My package',
        long_description=read('README.md'),
        long_description_content_type='text/markdown',
        classifiers=classifiers,
        packages=['src', 'src.core'],
        python_requires='>=2.7.9',
        entry_points="""
        [console_scripts]
        my_package = src.core.main:main
        """,
    )


try:
    run_setup()
except SystemExit as e:
    print(e)

当我运行python setup.py develop 或pip install -e . 时,软件包显示它安装成功。但是,当我运行my_package 时,它给出了错误:

Traceback (most recent call last):
  File "/Users/mm/opt/anaconda3/bin/my_package", line 33, in <module>
    sys.exit(load_entry_point('My-Package', 'console_scripts', 'my_package')())
  File "/Users/mm/opt/anaconda3/bin/my_package", line 25, in importlib_load_entry_point
    return next(matches).load()
  File "/Users/mm/opt/anaconda3/lib/python3.7/site-packages/importlib_metadata/__init__.py", line 105, in load
    module = import_module(match.group('module'))
  File "/Users/mm/opt/anaconda3/lib/python3.7/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'src.core'

我在适当的地方有__init__.py 文件。我试过使用setuptools'明确的find_packages 例程。我在这里做错了什么?

【问题讨论】:

  • 您能否确认您的site-packages 文件夹中有一个名为src 的包?您也可以运行pip list 进行验证。我相信它正确安装了软件包,但在 src 名称下 - 只是想验证一下。
  • Kacper,我在那里看不到,但我看到了 My-Package。
  • 您能否粘贴python -c "import sys; print(sys.executable)" 的输出并告诉您如何调用my_package(当它给出错误时)
  • 输出:/Users/mm/opt/anaconda3/bin/python setup.py 是这样写的,我试图调用它创建的系统可执行文件。也就是直接$ my_package
  • 如果您运行位于/Users/mm/opt/anaconda3/&lt;something&gt; 的my_package 会发生什么情况,也许是/bin/?我有 Windows,文件夹名为 /Scripts/。

标签: python anaconda setuptools modulenotfounderror


【解决方案1】:

您可以检查以下两点。通常,在检查 1 之后,您的控制台脚本开始工作。如果没有,请尝试检查 2 并查看它是否能指出您的问题。

检查 1:正确的 python 可执行文件和 pip 组合

有时普通的pip install 会使用错误的python 可执行文件安装。尝试使用与运行脚本时相同的 python 可执行文件强制安装。

python -m pip install -e .

更确定的是,您可以检查您的 python 可执行路径并直接使用它来代替python:

python -c "import sys; print(sys.executable)"

检查 2:代码在没有控制台脚本的情况下运行

然后,检查您是否可以直接运行该脚本。如果src/core/main.py 中还没有,请添加

if __name__ == '__main__':
    main()

然后,尝试直接运行脚本

python src/core/main.py

【讨论】:

  • 检查 1:没有变化。检查2:直接运行。
猜你喜欢
  • 2017-09-29
  • 2019-10-28
  • 2021-10-31
  • 2019-09-07
  • 1970-01-01
  • 2021-11-21
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多