我正在尝试在我使用Click库在Python中构建的CLI应用程序上运行PyInstaller .我在使用PyInstaller构建项目时遇到了麻烦.PyInstaller在他们的GitHub wiki中有一个名为Recipe Setuptools Entry Point的文档,该文档提供了有关如何将PyInstaller与setuptools包一起使用的信息,我正在为此项目使用它.但是,它似乎在我运行时找不到基本模块pyinstaller --onefile main.spec.
我的问题是:问题只是我的文件夹结构的问题吗?Recipe Setuptools入口点是否采用某种文件结构?
相关信息
Pyinstaller输出
184 INFO: PyInstaller: 3.3.1
184 INFO: Python: 3.6.4
189 INFO: Platform: Darwin-16.7.0-x86_64-i386-64bit
193 INFO: UPX is available.
Traceback (most recent call last):
File "/usr/local/bin/pyinstaller", line 11, in <module>
sys.exit(run())
File "/usr/local/lib/python3.6/site-packages/PyInstaller/__main__.py", line 94, in run
run_build(pyi_config, spec_file, **vars(args))
File "/usr/local/lib/python3.6/site-packages/PyInstaller/__main__.py", line 46, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "/usr/local/lib/python3.6/site-packages/PyInstaller/building/build_main.py", line 791, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File …Run Code Online (Sandbox Code Playgroud) 我一直在使用Click 包,但无法让以下代码片段正常工作。
import numpy as np
import click
@click.command()
@click.option('--get_print', default = True)
class CustomClass():
def __init__(s, get_print):
s.data = np.random.normal(0, 1, 10)
s.get_print = get_print
if s.get_print:
print("get_print =", s.get_print)
def print_mean(s):
print("Printing mean:")
mean_ = np.mean(s.data)
if s.get_print:
print(mean_)
if __name__ == '__main__':
CustomClass().print_mean()
Run Code Online (Sandbox Code Playgroud)
似乎该print_mean函数永远不会被调用。如果我注释掉 @Click 装饰器并手动设置get_print=True,该print_mean方法就会被很好地调用。
我怀疑 @Click 以某种方式设置__main__,所以当我if __name__ == '__main__'这样做时,它只会再次调用 Click - 但也许我错了?
在任何一种情况下,当您希望该方法继承所有选项,并且实际上能够调用类中定义的函数时,使用 Click 的正确方法是什么?__init__if __name__ == '__main__' …
我正在使用click(http://click.pocoo.org/3/)来创建命令行应用程序,但我不知道如何为此应用程序创建shell.
假设我正在编写一个名为test的程序,我有一个名为subtest1和subtest2的命令
我能够从终端工作,如:
$ test subtest1
$ test subtest2
Run Code Online (Sandbox Code Playgroud)
但我在考虑的是一个shell,所以我可以这样做:
$ test
>> subtest1
>> subtest2
Run Code Online (Sandbox Code Playgroud)
点击可以实现吗?
我正在使用click包创建命令行工具.但是,我想要一个'list'命令.例如:
@click.command
@click.option(help='list...')
def list():
# do stuff here
Run Code Online (Sandbox Code Playgroud)
除了将其作为函数名称之外,还有另一种方法可以单击传递命令名吗?我不希望这个函数影响python的内置list.我查看了文档并且无法真正找到有关命令名称的任何内容 - 我已经阅读了命令别名,但这似乎没有帮助解决这个问题.或者我不需要担心list被遮蔽,因为它被点击装饰器包裹?提前致谢.
我最近找到了点击库(http://click.pocoo.org/6/),我喜欢它.
我试图弄清楚是否可以为--help选项创建一个别名,该帮助的快捷方式.所以,例如:
app.py --help
Run Code Online (Sandbox Code Playgroud)
为主应用程序提供帮助
app.py sub --help
Run Code Online (Sandbox Code Playgroud)
将为sub提供帮助.我希望能够使用-h.如果我正在创建选项,它可能看起来像:
@click.option('-h', '--help')
Run Code Online (Sandbox Code Playgroud)
但该--help选项是内置的.有没有办法扩展该选项或为它创建别名?
我正在使用clickPython构建CLI.我有几个选项来定义我正在定义的命令,我希望隐藏其中一些命令--help.我怎样才能做到这一点?
我使用python中的click库构建了一个cli应用程序.没有关于如何调试命令的文档.
没有单击,它很容易在IDE中调试python文件,但是当我们使用click时,命令需要通过setup.py中的console_scripts设置运行.
我正在使用clicklib.
在我的代码中,有时我想打印帮助消息,但我知道的唯一方法是:
python xxx --help
Run Code Online (Sandbox Code Playgroud)
但我想使用某个函数在我的代码中打印帮助消息,例如:
click.print_help_msg()
Run Code Online (Sandbox Code Playgroud)
有这样的功能吗?
我正在使用具有以下结构的 Poetry 开发 Python 包:
/packagename
/packagename
/tests
__init__.py
test_packagename.py
__init__.py
packagename.py
pyproject.toml
Run Code Online (Sandbox Code Playgroud)
所有的包代码都在 packagename.py 中,它以__init__.py.
我想添加一个 CLI,我的目标是在命令行中执行以下操作:
<packagename> <packagefunction>
Run Code Online (Sandbox Code Playgroud)
为此,我使用了 Python 的 click 包并将我的<packagefunction>内部写packagename.py为:
@click.command()
def packagefunction():
Run Code Online (Sandbox Code Playgroud)
目前,我已将入口点添加到诗歌配置文件中:
[tool.poetry.scripts]
<packagefunction> = '<packagename>:<packagefunction>'
Run Code Online (Sandbox Code Playgroud)
并运行:
poetry run <packagefunction>
Run Code Online (Sandbox Code Playgroud)
完美执行。
但是,我知道这不是正确的方法,我希望 CLI 使用上面显示的命令执行。
这似乎是python-click的一般问题,但是在谷歌的任何地方都没有提到它.
如果我尝试运行最简单的python单击脚本,如来自realpython的以下 内容
import click
@click.group()
def greet():
pass
@greet.command()
def hello(**kwargs):
pass
@greet.command()
def goodbye(**kwargs):
pass
if __name__ == '__main__':
greet()
Run Code Online (Sandbox Code Playgroud)
Intellij调试器完全轰炸错误消息:
Error: no such option: --multiproc
Run Code Online (Sandbox Code Playgroud)
我用多个python-click脚本尝试了这个,调试永远不会有效.有没有人注意到这一点,有什么方法可以解决这个问题吗?
python ×10
python-click ×10
python-3.x ×2
inheritance ×1
pycharm ×1
pyinstaller ×1
setuptools ×1