从源码安装Wagtail时遇TypeError:期望字符串或字节类对象
本地构建Wagtail源码时执行setup脚本报错:TypeError: expected string or bytes-like object
我是Wagtail新手,想参与开源贡献,但本地从源码构建时,执行setup脚本(mysetup.py)多次失败,最终触发如下报错,核心错误为 TypeError: expected string or bytes-like object:
Traceback (most recent call last): File "/mnt/d_drive/var_docs_complements/open-source-contribs/wagtail/./mysetup.py", line 81, in <module> setup( File "/home/ainaf/.local/lib/python3.10/site-packages/setuptools/__init__.py", line 102, in setup _install_setup_requires(attrs) File "/home/ainaf/.local/lib/python3.10/site-packages/setuptools/__init__.py", line 70, in _install_setup_requires dist = MinimalDistribution(attrs) File "/home/ainaf/.local/lib/python3.10/site-packages/setuptools/__init__.py", line 52, in __init__ super().__init__(filtered) File "/home/ainaf/.local/lib/python3.10/site-packages/setuptools/dist.py", line 297, in __init__ for ep in metadata.entry_points(group='distutils.setup_keywords'): File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 1021, in entry_points return SelectableGroups.load(eps).select(**params) File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 459, in load ordered = sorted(eps, key=by_group) File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 1018, in <genexpr> eps = itertools.chain.from_iterable( File "/usr/lib/python3.10/importlib/metadata/_itertools.py", line 16, in unique_everseen k = key(element) File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 943, in _normalized_name or super()._normalized_name File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 622, in _normalized_name return Prepared.normalize(self.name) File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 871, in normalize return re.sub(r"[-_.]+", "-", name).lower().replace('-', '_') File "/usr/lib/python3.10/re.py", line 209, in sub return _compile(pattern, flags).sub(repl, string, count) TypeError: expected string or bytes-like object
我试过用GitHub Codespace可以正常构建,但希望能在本地完成,已经搜索过解决方法但没找到有效方案。
解决建议
升级setuptools版本:这个报错大多是Python 3.10与旧版setuptools不兼容导致的,先把setuptools升级到最新稳定版:
pip install --upgrade setuptools重建干净的虚拟环境:如果使用了虚拟环境,可能存在残留依赖或损坏的包,删除旧环境重新创建:
# 示例:删除名为wagtail-dev的虚拟环境(Linux/macOS) rm -rf wagtail-dev # 用Python 3.10创建新虚拟环境 python3.10 -m venv wagtail-dev # 激活环境 source wagtail-dev/bin/activate # Windows系统激活命令:wagtail-dev\Scripts\activate # 升级pip和setuptools pip install --upgrade pip setuptools # 用官方推荐的方式安装Wagtail开发依赖 pip install -e .[testing,docs]检查并修复损坏的依赖包:用pip检查系统中是否有损坏的包,修复后再尝试构建:
pip check如果输出有问题的包,执行
pip install --force-reinstall <包名>重新安装该包。使用官方标准构建流程:不要使用自定义的
mysetup.py,直接用Wagtail仓库根目录的官方脚本,优先用pip install -e .这种可编辑安装方式,而不是直接运行setup.py。
内容的提问来源于stack exchange,提问作者Elias Finn
相关产品推荐
相关产品推荐

