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

我想制作一个 cli 工具并找到它作为参考:https ://python-packaging.readthedocs.io/en/latest/command-line-scripts.html


所以我创建了一个具有以下结构的目录


$ tree modules_and_packages

modules_and_packages

├── bin

│   ├── cli_script

│   └── cli_script~

├── __init__.py

├── setup.py

├── setup.py~

├── some_module.py

└── some_module.py~

我可以通过 pip 安装模块没有任何问题:


pip3 install ./modules_and_packages

Processing ./modules_and_packages

Installing collected packages: some-module

  Running setup.py install for some-module ... done

Successfully 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_packages

ModuleNotFoundError: No module named 'modules_and_packages'

这是文件中的内容:


安装程序.py


from setuptools import setup


setup(

    name='some_module',

    py_modules=['some_module'],

    scripts=['bin/cli_script']

)

some_module.py


def some_func():

    return 42

bin/cli_script


#!/usr/bin/env python3


import modules_and_packages

print('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


扬帆大鱼
浏览 173回答 2
2回答

catspeake

您不包括modules_and_packages在分发中。这是因为您的项目结构是错误的 - 将其与您引用的教程中的结构进行比较。它应该如下所示:myproject├── modules_and_packages│&nbsp; &nbsp;├── __init__.py│&nbsp; &nbsp;└── some_module.py├── setup.py└── bin&nbsp; &nbsp; └── cli_script现在将包包含modules_and_packages到安装脚本中的 dist 中:# setup.pysetup(&nbsp; &nbsp; name='some_module',&nbsp; &nbsp; packages=['modules_and_packages'],&nbsp; &nbsp; scripts=['bin/cli_script'])如果您使用该setuptools.find_packages()功能进行包收集,它会变得更加容易:from setuptools import find_packages, setupsetup(&nbsp; &nbsp; name='some_module',&nbsp; &nbsp; packages=find_packages(),&nbsp; &nbsp; scripts=['bin/cli_script'])

慕田峪4524236

您遵循的指南已有 5 年历史,而且有点模糊。你可以像这样设置你的cli工具:~ tree modules_and_packages├── bin│&nbsp; &nbsp;└── cli_script├── setup.py└── some_module&nbsp; &nbsp; ├── __init__.py&nbsp; &nbsp; └── some_module.py安装程序.pyfrom setuptools import setupsetup(&nbsp; &nbsp; name='some_module',&nbsp; &nbsp; py_modules=['some_module'],&nbsp; &nbsp; scripts=['bin/cli_script'])some_module/__init__.pyfrom .some_module import *some_module/some_module.pydef some_func():&nbsp; &nbsp; return 42bin/cli_script#!/usr/bin/env python3import some_moduleprint('hello')print(some_module.some_func())然后安装,在modules_and_packages目录中运行:~ python setup.py develop然后运行:~ cli_scripthello42或者,如果您熟悉cookiecutter,我建议您将此模板用于 python 包,因为它具有内置的 cli 界面。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python