ModuleNotFoundError in Python 3.7.3 Setup.py Package



我有一个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 developpip 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例程。我在这里做错了什么?

以下是您可以检查的两件事。通常情况下,在执行check 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

最新更新