在pip安装kotti的时候,报错:
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for bcrypt
ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (bcrypt)
看来是bcrypt库无法安装,于是使用pkg安装bcrypt:
pkg install py311-bcrypt
Updating FreeBSD repository catalogue...
pkg: No SRV record found for the repo 'FreeBSD'
Fetching meta.conf: 0%
FreeBSD repository is up to date.
All repositories are up to date.
The following 3 package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
py311-bcrypt: 3.2.2_1
py311-cffi: 1.16.0
py311-pycparser: 2.22
Number of packages to be installed: 3
The process will require 3 MiB more space.
542 KiB to be downloaded.
Proceed with this action? [y/N]: y
[1/3] Fetching py311-cffi-1.16.0.pkg: 100% 280 KiB 287.0kB/s 00:01
[2/3] Fetching py311-pycparser-2.22.pkg: 100% 230 KiB 235.4kB/s 00:01
[3/3] Fetching py311-bcrypt-3.2.2_1.pkg: 100% 32 KiB 32.9kB/s 00:01
Checking integrity... done (0 conflicting)
[1/3] Installing py311-pycparser-2.22...
[1/3] Extracting py311-pycparser-2.22: 100%
[2/3] Installing py311-cffi-1.16.0...
[2/3] Extracting py311-cffi-1.16.0: 100%
[3/3] Installing py311-bcrypt-3.2.2_1...
[3/3] Extracting py311-bcrypt-3.2.2_1: 100%
结果不管用....因为pkg安装的库和pip安装的库并不在同一个环境下,使用pkg安装后,pip环境下还需要编译安装。
这时尝试直接从pkg位置cp到python虚拟环境下:
找到安装的位置:
/usr/local/lib/python3.11/site-packages/bcrypt/__init__.py
确认python虚拟环境的位置:
/home/skywalk/py311
执行cp操作:
cp -r /usr/local/lib/python3.11/site-packages/bcrypt /home/skywalk/py311/lib/python3.11/site-packages/
cp过去后,测试import bcrypt,报错
import bcrypt
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/skywalk/py311/lib/python3.11/site-packages/bcrypt/__init__.py", line 34, in <module>
from . import _bcrypt # noqa: I100
^^^^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named '_cffi_backend'
查看它有几个关联库,看来需要这几个库都装好才行:
py311-bcrypt: 3.2.2_1
py311-cffi: 1.16.0
py311-pycparser: 2.22
pip安装cffi库
pip install cffi
再进行python -c "import bcrypt"测试,测试通过
python -c "import bcrypt"
尽管测试时没有报错,但是安装kotti的时候还是说没有bcrypt,安装时报错。
这时候安装kotti的报错显示为:
This package requires Rust >=1.64.0.
看来需要安装rust,使用pkg安装rust:
pkg install rust
这时候再编译brypt完成
Successfully built bcrypt
Installing collected packages: bcrypt
Successfully installed bcrypt-4.2.0
终于通过了
Successfully installed Babel-2.15.0 Chameleon-4.5.4 Mako-1.3.5 alembic-1.13.2 anyascii-0.3.2 beaker-1.13.0 bleach-4.1.0 bleach-allowlist-1.0.3 colander-2.0 deform-2.0.14 docopt-0.6.2 fanstatic-1.4 filedepot-0.11.0 formencode-2.1.0 greenlet-3.0.3 html2text-2024.2.26 iso8601-2.1.0 js.angular-1.1.4 js.bootstrap-3.3.4 js.deform-2.0.14 js.fineuploader-5.14.0 js.html5shiv-3.7.3 js.jquery-1.9.1 js.jquery-form-3.9 js.jquery-maskedinput-1.4.1 js.jquery-maskmoney-3.0.2 js.jquery-sortable-0.9.13 js.jquery-tablednd-0.4 js.jquery-timepicker-addon-1.5.3 js.jqueryui-1.10.3 js.jqueryui-tagit-2.0.24.post2 js.modernizr-2.5.3.1 js.select2-4.0.4.post1 js.tinymce-4.5.4 kotti-2.0.9 lingua-4.15.0 packaging-24.1 peppercorn-0.6 polib-1.2.0 pyramid-1.10.8 pyramid-beaker-0.9 pyramid-chameleon-0.3 pyramid-deform-0.2 pyramid-mailer-0.15.1 pyramid-tm-2.5 pyramid-zcml-1.2.0 repoze.lru-0.7 repoze.sendmail-4.4.1 repoze.workflow-1.1 repoze.zcml-1.1 sqlalchemy-2.0.31 sqlalchemy-utils-0.41.2 transaction-4.0 typing-extensions-4.12.2 unidecode-1.3.8 waitress-3.0.0 webencodings-0.5.1 zope.component-6.0 zope.configuration-5.0.1 zope.event-5.0 zope.hookable-6.0 zope.i18nmessageid-6.1.0 zope.schema-7.0.1 zope.sqlalchemy-3.1
总结:
在FreeBSD下安装kotti等经常会碰到安装依赖库入bcrypt等失败的情况,遇到这种情况,可以使用如下方法解决:
1 使用pkg来安装bcrypt等库,注意bcypt还需要rust,也通过pkg来安装
pkg install py311-bcrypt rust
2 若python的环境下还是没有bcrypt,pip安装一下即可
pip install bcrypt
如果提示缺少cffi等库,pip安装上即可。
3 最后再pip安装kotti等库。