首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使python模块可用作cli工具的最简单方法

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

Stack Overflow用户
提问于 2020-04-12 08:13:20
回答 2查看 969关注 0票数 2

我想做一个cli工具,并发现这是一个参考:https://python-packaging.readthedocs.io/en/latest/command-line-scripts.html

因此,我创建了一个具有以下结构的目录

代码语言:javascript
复制
$ 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安装模块,没有任何问题:

代码语言:javascript
复制
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时,会得到以下错误:

代码语言:javascript
复制
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'

以下是文件中的内容:

setup.py

代码语言:javascript
复制
from setuptools import setup

setup(
    name='some_module',
    py_modules=['some_module'],
    scripts=['bin/cli_script']
)

some_module.py

代码语言:javascript
复制
def​ some_func():
    return​ 42

bin/cli脚本

代码语言:javascript
复制
#!/usr/bin/env python3

import modules_and_packages
print('hello')

如您所见,我只是尝试测试使用模块制作命令行工具的最简单情况。我在这里做错什么了?

编辑:

尝试导入some_module时,在尝试执行hoefling的建议后收到的错误消息

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-12 09:47:22

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

代码语言:javascript
复制
myproject
├── modules_and_packages
│   ├── __init__.py
│   └── some_module.py
├── setup.py
└── bin
    └── cli_script

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

代码语言:javascript
复制
# setup.py

setup(
    name='some_module',
    packages=['modules_and_packages'],
    scripts=['bin/cli_script']
)

如果您将setuptools.find_packages()函数用于包集合,则会变得更容易:

代码语言:javascript
复制
from setuptools import find_packages, setup

setup(
    name='some_module',
    packages=find_packages(),
    scripts=['bin/cli_script']
)
票数 2
EN

Stack Overflow用户

发布于 2020-04-12 09:45:54

你所遵循的指南是5岁,有点模糊。您可以像这样设置cli工具:

代码语言:javascript
复制
~ tree modules_and_packages
├── bin
│   └── cli_script
├── setup.py
└── some_module
    ├── __init__.py
    └── some_module.py

setup.py

代码语言:javascript
复制
from setuptools import setup

setup(
    name='some_module',
    py_modules=['some_module'],
    scripts=['bin/cli_script']
)

某些模块/__init__..py

代码语言:javascript
复制
from .some_module import *

某些模/某些模

代码语言:javascript
复制
def some_func():
    return 42

bin/cli脚本

代码语言:javascript
复制
#!/usr/bin/env python3

import some_module

print('hello')
print(some_module.some_func())

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

代码语言:javascript
复制
~ python setup.py develop

然后跑:

代码语言:javascript
复制
~ cli_script
hello
42

或者,如果您熟悉炊具,我建议对python包使用此模板,因为它有内置的cli接口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61168583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档