亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使 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 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號