gpt4 book ai didi

python - ModuleNotFoundError 使用 setup.py

转载 作者:行者123 更新时间:2023-12-05 00:39:51 25 4
gpt4 key购买 nike

我使用 python click package 和 setuptools 来创建一个简单的命令行。我在 pipenv virtualenv 中工作。

我的工作目录是这样的:

jkt/scripts/app.py

而我的 setup.py 是这样的:

from setuptools import setup, find_packages

setup(

name='jkt',
version='0.1',
packages=find_packages(),
include_package_data=True,
entry_points='''
[console_scripts]
jktool=jkt.scripts.app:my_function
''',

)

然后我运行命令
pip install --editable .

并运行 jktool 来执行 my_function 但我得到错误:

ModuleNotFoundError No module named 'jkt'.

但是当 jkt 目录中的 app.py 可以运行我的函数

setup(
name='app',
version='0.1',
py_modules=['app'],
entry_points='''
[console_scripts]
app=app:jktools
''',
)

在我运行 pip install -e . 之后,我可以使用 app 命令来运行我的函数。

最佳答案

As I mentioned ,我无法重现您的错误(带有现代 pip 的 Python 3.7 似乎工作得很好),但在旧版本上可能会出现一些问题。

由于您看起来不像将 __init__.py 文件放在子目录中,因此 find_packages 实际上根本找不到任何包(python3 - c 'from setuptools import find_packages; print(find_packages()) 打印空的 list, [])。您可以通过以下三种方式之一解决此问题:

  1. 创建空的 __init__.py 文件以将这些文件夹显式标记为包文件夹;在类 UNIX 系统上,touch jkt/__init__.pytouch jkt/scripts/__init__.py 足以创建它们
  2. 仅限 Python 3.3+:(还需要现代 setuptools,因此可能需要 pip install --upgrade setuptools)替换您对 find_packages 的使用与 find_namespace_packages (which recognizes Python 3 era implicit namespace packages) .
  3. 完全摆脱 find_packages 并直接列出包,例如将 packages=find_packages(), 替换为 packages=['jkt', 'jkt.scripts'],

选项 #2 仅适用于 Python 3.3+,因此如果您的包打算在旧版本的 Python 上运行,请使用选项 #1 或 #3。

关于python - ModuleNotFoundError 使用 setup.py,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54819576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com