为了账号安全,请及时绑定邮箱和手机立即绑定

使 python 模块可用作 cli 工具的最简单方法

使 python 模块可用作 cli 工具的最简单方法

扬帆大鱼 2022-10-06 16:22:59
我想制作一个 cli 工具并找到它作为参考:https ://python-packaging.readthedocs.io/en/latest/command-line-scripts.html所以我创建了一个具有以下结构的目录$ tree modules_and_packagesmodules_and_packages├── bin│   ├── cli_script│   └── cli_script~├── __init__.py├── setup.py├── setup.py~├── some_module.py└── some_module.py~我可以通过 pip 安装模块没有任何问题:pip3 install ./modules_and_packagesProcessing ./modules_and_packagesInstalling collected packages: some-module  Running setup.py install for some-module ... doneSuccessfully installed some-module-0.0.0但是当我cli_script在命令行上运行时,出现以下错误:Traceback (most recent call last):  File "/home/david/.local/bin/cli_script", line 3, in <module>    import modules_and_packagesModuleNotFoundError: No module named 'modules_and_packages'这是文件中的内容:安装程序.pyfrom setuptools import setupsetup(    name='some_module',    py_modules=['some_module'],    scripts=['bin/cli_script'])some_module.pydef some_func():    return 42bin/cli_script#!/usr/bin/env python3import modules_and_packagesprint('hello')如您所见,我只是想测试使用模块制作命令行工具的最简单情况。我在这里做错了什么?编辑:尝试 hoefling 的建议后尝试导入 some_module 时收到错误消息Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "/home/david/.local/lib/python3.6/site-packages/some_module.py", line 1    def some_func():        ^SyntaxError: invalid character in identifier
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

您不包括modules_and_packages在分发中。这是因为您的项目结构是错误的 - 将其与您引用的教程中的结构进行比较。它应该如下所示:


myproject

├── modules_and_packages

│   ├── __init__.py

│   └── some_module.py

├── setup.py

└── bin

    └── cli_script

现在将包包含modules_and_packages到安装脚本中的 dist 中:


# setup.py


setup(

    name='some_module',

    packages=['modules_and_packages'],

    scripts=['bin/cli_script']

)

如果您使用该setuptools.find_packages()功能进行包收集,它会变得更加容易:


from setuptools import find_packages, setup


setup(

    name='some_module',

    packages=find_packages(),

    scripts=['bin/cli_script']

)


查看完整回答
反对 回复 2022-10-06
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

您遵循的指南已有 5 年历史,而且有点模糊。你可以像这样设置你的cli工具:


~ tree modules_and_packages

├── bin

│   └── cli_script

├── setup.py

└── some_module

    ├── __init__.py

    └── some_module.py

安装程序.py


from setuptools import setup


setup(

    name='some_module',

    py_modules=['some_module'],

    scripts=['bin/cli_script']

)

some_module/__init__.py


from .some_module import *

some_module/some_module.py


def some_func():

    return 42

bin/cli_script


#!/usr/bin/env python3


import some_module


print('hello')

print(some_module.some_func())

然后安装,在modules_and_packages目录中运行:


~ python setup.py develop

然后运行:


~ cli_script

hello

42

或者,如果您熟悉cookiecutter,我建议您将此模板用于 python 包,因为它具有内置的 cli 界面。



查看完整回答
反对 回复 2022-10-06
  • 2 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信