gpt4 book ai didi

python - 我可以将 Python 控制台脚本放入子模块中吗?

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

我有一个名为 cmdline 的 Python 包。我使用 setuptools 来定义控制台入口点。我想将此入口点放入 cli 子模块中,但当我尝试运行已安装的脚本时出现错误。

我的项目布局如下所示。

setup.py
cmdline/
__init__.py
cli/
__init__.py
main.py

setup.py 看起来像这样。

from setuptools import setup

setup(
name='cmdline',
version='1.0.0',
packages=['cmdline'],
url='',
license='',
author='W.P. McNeill',
author_email='',
description='',
entry_points={
'console_scripts': ['cmdline=cmdline.cli.main:main'],
}
)

main.py 文件如下所示。

def main():
print("Hello, world")


if __name__ == "__main__":
main()

两个 __init__.py 文件都是空的。

如果我使用 python setup.py install 安装它,然后尝试运行控制台脚本,则会收到错误。

> cmdline
Traceback (most recent call last):
File "//anaconda/envs/cmdline/bin/cmdline", line 9, in <module>
load_entry_point('cmdline==1.0.0', 'console_scripts', 'cmdline')()
File "build/bdist.macosx-10.5-x86_64/egg/pkg_resources/__init__.py", line 542, in load_entry_point
File "build/bdist.macosx-10.5-x86_64/egg/pkg_resources/__init__.py", line 2569, in load_entry_point
File "build/bdist.macosx-10.5-x86_64/egg/pkg_resources/__init__.py", line 2229, in load
File "build/bdist.macosx-10.5-x86_64/egg/pkg_resources/__init__.py", line 2235, in resolve
ImportError: No module named cli.main

但是,如果我使用 python setup.pydevelop 通过软链接(soft link)安装它,它就可以工作。

> cmdline
Hello, world

如果我不使用 cli 子模块并且仅将 main.py 放在项目的顶层,它也可以工作。

如何使子模块配置起作用?

最佳答案

您的 setup.py 不包含 cmdline.cli 子包,仅包含 cmdline 包。 setuptools 不会递归添加所有子包,您需要显式指定所有包,或者使用 find_packages() 函数来执行此操作:

from setuptools import setup, find_packages

setup(
name='cmdline',
version='1.0.0',
packages=find_packages(),
# or:
# packages=['cmdline', 'cmdline.cli']
url='',
license='',
author='W.P. McNeill',
author_email='',
description='',
entry_points={
'console_scripts': ['cmdline=cmdline.cli.main:main'],
}
)

之后,cmdline.cli 软件包将被安装,并且入口点应该是可解析的。

关于python - 我可以将 Python 控制台脚本放入子模块中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36656936/

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