python - python setup.py sdist bdist_wheel 引发`TypeError:预期的字符串或类似字节的对象`
问题描述
问题陈述
当设置packages=
为[find_packages()]
我遇到 TypeError 时。将 packages 变量直接设置为结果字符串 ( "spark_jobs"
) 时,我不再遇到意外异常。我想知道是否有人明白这里发生了什么。
供参考,我在 python 3.9 上运行。
安装程序.py
setup(
name=f"{PROJECT_NAME}",
version=f"{VERSION}",
description="f{PROJECT_DESCRIPTION}",
long_description=README,
long_description_content_type="text/markdown",
url=f"{url}",
author=f"{author}",
classifiers=[
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
],
packages=[find_packages()],
include_package_data=True,
install_requires=INSTALL_REQUIRES,
tests_require=TESTS_REQUIRE,
)
错误
python setup.py sdist bdist_wheel
Traceback (most recent call last):
File "setup.py", line 40, in <module>
setup(
File "/Users/alexlordthorsen/.venvs/data_platform/lib/python3.8/site-packages/setuptools/__init__.py", line 145, in setup
return distutils.core.setup(**attrs)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/core.py", line 108, in setup
_setup_distribution = dist = klass(attrs)
File "/Users/alexlordthorsen/.venvs/data_platform/lib/python3.8/site-packages/setuptools/dist.py", line 445, in __init__
_Distribution.__init__(self, {
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/dist.py", line 292, in __init__
self.finalize_options()
File "/Users/alexlordthorsen/.venvs/data_platform/lib/python3.8/site-packages/setuptools/dist.py", line 734, in finalize_options
ep.load()(self, ep.name, value)
File "/Users/alexlordthorsen/.venvs/data_platform/lib/python3.8/site-packages/setuptools/dist.py", line 329, in check_packages
if not re.match(r'\w+(\.\w+)*', pkgname):
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/re.py", line 189, in match
return _compile(pattern, flags).match(string)
TypeError: expected string or bytes-like object
设置断点
当我设置断点时,我发现结果是一个带有单个字符串的列表。
(Pdb) find_packages()
['spark_jobs']
令人困惑的是,如果我packages=['spark-jobs']
直接设置,我将不再遇到上述错误,但我也会得到一个空的
解决方案
find_packages()
已经返回一个列表,您不需要将其包装在另一个列表中。正确的语法只是
packages=find_packages(),
包名中packages=['spark-jobs']
的名称必须与目录的拼写完全一样(并且目录名必须遵循 Python 命名规则)所以将其修复为
packages=['spark_jobs']
推荐阅读
- r - 任何人都可以协助转换代码元素以使其运行吗?
- c# - GetStringAsync 持续时间过长且永不返回
- docker - Docker 环境变量定义
- android - sdkmanager 安装 cmake 失败
- css - 在溢出隐藏祖父母之外显示定位的 div
- python - 没有连接到 BLE 设备?使用黯淡:“AttributeError:'NoneType'对象没有属性'ConnectionStatusChanged'”
- r - 使用r中的简单特征(SF)通过属性有效结合特征?
- docker - net core docker compose 确实注册文件更改
- google-cloud-bigtable - Google Bigtable - 如何存储数据以便能够按国家、城市和日期查询?
- c# - 使用 FileHelperAsyncEngine 读取、修改和写入