DuMate修改Kotti支持python3.12过程中碰到的一些报错

报错:AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?

启动报错

skywalk@DESKTOP-9C5AU01:~/work/kotti-py312/Kotti$ pserve  development.ini
Traceback (most recent call last):
  File "/home/skywalk/.pyenv/versions/3.12.9/bin/pserve", line 3, in <module>
    from pyramid.scripts.pserve import main
  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/site-packages/pyramid/scripts/pserve.py", line 26, in <module>
    from pyramid.path import AssetResolver
  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/site-packages/pyramid/path.py", line 2, in <module>
    import pkg_resources
  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/site-packages/pkg_resources/__init__.py", line 2191, in <module>
    register_finder(pkgutil.ImpImporter, find_on_path)
                    ^^^^^^^^^^^^^^^^^^^
AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?

安装这个版本的setuptools搞定

pip install setuptools==70.3.0 -U

但是我原来的是:80.10.2

报错No module named '_sqlite3'

  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/site-packages/_pytest/assertion/rewrite.py", line 186, in exec_module
    exec(co, module.__dict__)
  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/site-packages/pytest_cov/plugin.py", line 6, in <module>
    import coverage
  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/site-packages/coverage/__init__.py", line 24, in <module>
    from coverage.control import (
  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/site-packages/coverage/control.py", line 28, in <module>
    from coverage.collector import Collector, HAS_CTRACER
  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/site-packages/coverage/collector.py", line 19, in <module>
    from coverage.data import CoverageData
  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/site-packages/coverage/data.py", line 24, in <module>
    from coverage.sqldata import CoverageData
  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/site-packages/coverage/sqldata.py", line 16, in <module>
    import sqlite3
  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/sqlite3/__init__.py", line 57, in <module>
    from sqlite3.dbapi2 import *
  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'

安装sqlite3的开发库

sudo apt-get install libsqlite3-dev

不行。

重新安装新版本的pytest

pip install --upgrade pytest pluggy coverage pytest-cov

Successfully installed coverage-7.13.5 pytest-9.0.3 pytest-cov-7.1.0

这样报错变回到:

报错ModuleNotFoundError: No module named 'pkg_resources'

  File "/home/skywalk/.pyenv/versions/3.12.9/lib/python3.12/site-packages/pyramid/path.py", line 2, in <module>
    import pkg_resources
ModuleNotFoundError: No module named 'pkg_resources'

试了重新安装setuptools,还是不行

重新建立虚拟python环境试试,还是一样

后来发现必须要某个特定版本80.10.2

pip install "setuptools==80.10.2" -U

接着处理报错No module named '_sqlite3'

简单测试命令

python3 -c "import sqlite3; print(sqlite3.sqlite_version)"

按照G4F里的解决方案,在Ubuntu下安装全量python3.12

# Example for Ubuntu
sudo apt-get install python3.12-full

不行,还需要继续操作,重新安装pyenv(因为这台系统的额python系统是用pyenv安装的)

# Uninstall the current Python version
pyenv uninstall 3.12.9

# Reinstall with the newly available SQLite libraries
pyenv install 3.12.9

当然我实际安装的是3.12.12版本

pyenv install 3.12

安装完成后,测试一下:

python3 -c "import sqlite3; print(sqlite3.sqlite_version)"

没有输出,证明ok ,问题解决

加入g4f后报错cannot import name 'ContentEditFormBase' from 'kotti.views.edit'

    from kotti.views.edit import ContentEditFormBase
ImportError: cannot import name 'ContentEditFormBase' from 'kotti.views.edit' (G:\dumatework\Kotti\kotti\views\edit\__init__.py)

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "G:\dumatework\.venv\Scripts\pserve.exe\__main__.py", line 7, in <module>
  File "G:\dumatework\.venv\Lib\site-packages\pyramid\scripts\pserve.py", line 34, in main     
    return command.run()
           ^^^^^^^^^^^^^
  File "G:\dumatework\.venv\Lib\site-packages\pyramid\scripts\pserve.py", line 275, in run     
    app = loader.get_wsgi_app(app_name, config_vars)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "G:\dumatework\.venv\Lib\site-packages\plaster_pastedeploy\__init__.py", line 111, in get_wsgi_app
    return loadapp(
           ^^^^^^^^
  File "G:\dumatework\.venv\Lib\site-packages\paste\deploy\loadwsgi.py", line 246, in loadapp  
    return loadobj(APP, uri, name=name, **kw)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "G:\dumatework\.venv\Lib\site-packages\paste\deploy\loadwsgi.py", line 271, in loadobj  
    return context.create()
           ^^^^^^^^^^^^^^^^
  File "G:\dumatework\.venv\Lib\site-packages\paste\deploy\loadwsgi.py", line 738, in create   
    return self.object_type.invoke(self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "G:\dumatework\.venv\Lib\site-packages\paste\deploy\loadwsgi.py", line 198, in invoke   
    app = context.app_context.create()
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "G:\dumatework\.venv\Lib\site-packages\paste\deploy\loadwsgi.py", line 738, in create   
    return self.object_type.invoke(self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "G:\dumatework\.venv\Lib\site-packages\paste\deploy\loadwsgi.py", line 136, in invoke   
    return fix_call(context.object, context.global_conf, **context.local_conf)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "G:\dumatework\.venv\Lib\site-packages\paste\deploy\util.py", line 61, in fix_call      
    val = callable(*args, **kw)
          ^^^^^^^^^^^^^^^^^^^^^
  File "G:\dumatework\Kotti\kotti\__init__.py", line 196, in main
    config = base_configure(global_config, **settings)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "G:\dumatework\Kotti\kotti\__init__.py", line 250, in base_configure
    config.include(module)
  File "G:\dumatework\.venv\Lib\site-packages\pyramid\config\__init__.py", line 676, in include    c(configurator)
  File "G:\dumatework\kotti_g4f\kotti_g4f\__init__.py", line 58, in includeme
    config.scan(__name__)
  File "G:\dumatework\.venv\Lib\site-packages\pyramid\config\__init__.py", line 880, in scan   
    scanner.scan(
  File "G:\dumatework\.venv\Lib\site-packages\venusian\__init__.py", line 220, in scan
    __import__(modname)
  File "G:\dumatework\kotti_g4f\kotti_g4f\views\add.py", line 6, in <module>
    from kotti.views.edit import ContentEditFormBase
ImportError: cannot import name 'ContentEditFormBase' from 'kotti.views.edit' (G:\dumatework\Kotti\kotti\views\edit\__init__.py)

问题原因: 模板使用了 request.macros['page'],但 Kotti 使用的是 api.macro() 方法。

修复内容: 将模板改为使用 Kotti 标准模板模式:

metal:use-macro="api.macro('kotti:templates/view/master.pt')"

虚拟环境中重新安装 kotti_g4f:

cd G:\dumatework\kotti_g4f
pip install -e .

然后重新启动 Kotti ,问题解决!

总结:

No module named '_sqlite3'

先用测试命令

python3 -c "import sqlite3; print(sqlite3.sqlite_version)"

ModuleNotFoundError: No module named 'pkg_resources' 

当前是使用的特定版本的setuptools解决

pip install "setuptools==80.10.2" -U
Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐