在新软件包中使用Python软件包“ click”时,导致“错误:出现意外的额外参数(sdist bdist_wheel)”

天气预报

我正在尝试创建一个可用作终端命令的Python包。我的setup.py文件看起来像

import setuptools

# If the package is being updated (and not installed for the first time),
# save user-defined data.
try:
    import checklist
    update = True
except ModuleNotFoundError:
    update = False

if update:
    import os
    import pickle
    dir = os.path.join(os.path.dirname(checklist.__file__), 'user_settings')
    files = {}
    for file in os.listdir(dir):
        files[file] = pickle.load(open(os.path.join(dir, file), "rb"))

with open("README.md", "r") as fh:
    long_description = fh.read()

setuptools.setup(
    name="SampleName",
    version="0.2.0",
    author="Author1, Author2",
    author_email="[email protected]",
    description="words words words.",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/samplesample/sample1",
    packages=setuptools.find_packages(),
    classifiers=[
        "Programming Language :: Python :: 3",
        "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
        "Operating System :: OS Independent",
    ],
    entry_points='''
        [console_scripts]
        checklist=checklist.checklist:cli
    ''',
    python_requires='>=3.7',
    package_data={"checklist":["user_settings/*.pkl"]},
    include_package_data=True,
)

if update:
    for key in files:
        pickle.dump(files[key], open(os.path.join(dir, key), "wb"))

当我尝试checklist使用命令创建软件包时

python setup.py sdist bdist_wheel

我收到消息

Error: Got unexpected extra arguments (sdist bdist_wheel)

当我click从环境中移出时,轮子的创建没有问题。这似乎很奇怪,因为我的代码使用click

import os
import sys
import csv
import click
import datetime as dt
from datetime import datetime
from contextlib import suppress
import pickle


class UI:

    def __init__(self):
        <set variables>...

    <some methods>...

# noinspection SpellCheckingInspection
class Checklist(UI):

    def __init__(self):
        <set variables>...

        # start the process...
        while self.step_index < len(self.to_do):
            with suppress(ExitException):
                self.step()

    def step(self):
        self.__getattribute__(self.to_do[self.step_index])()
        self.step_index += 1
        self.overwrite = False

    <some methods>...


@click.command()
def cli():
    Checklist()

cli()

是什么原因造成的?我如何解决它?

博士

令人惊讶的是,如何将偏离最佳实践的一些小偏差链接在一起,从而产生一个主要问题。:-)

问题click如下。如果click已安装,则setup.py导入上面显示的模块。导入的模块运行时cli(),表示cli()调用@click.command()并解析命令行(意为setup.py,不是for click)并产生错误。

如果click未安装,则setup.py尝试导入,checklist并失败ModuleNotFoundError捕获到异常并将其忽略,setup.py然后继续设置。

要解决此问题,请制作checklist一个既可以运行(调用cli())又可以导入而不调用的模块cli()

def main():
    cli()

if __name__ == '__main__':
    main()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档