gpt4 book ai didi

Python 包 "click"在新包中使用时会导致 "Error: Got unexpected extra arguments (sdist bdist_wheel)"

转载 作者:太空宇宙 更新时间:2023-11-03 19:50:05 24 4
gpt4 key购买 nike

我正在尝试创建一个可用作终端命令的 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@email.com",
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,则您的 setup.py 会导入上面向我们展示的模块。并且模块导入时运行cli(),表示cli()调用@click.command()并且解析命令行(用于 setup.py,而不是 click)并产生错误。

如果未安装 click,则您的 setup.py 尝试导入 checklist 并失败,并出现 ModuleNotFoundError。在 setup.py 中捕获并忽略异常,然后安装继续。

要解决此问题,请使 checklist 成为一个既可以运行(调用 cli())又可以在不调用 cli() 的情况下导入的模块>:

def main():
cli()

if __name__ == '__main__':
main()

关于Python 包 "click"在新包中使用时会导致 "Error: Got unexpected extra arguments (sdist bdist_wheel)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59900049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com