22

我对 python 完全陌生,当我尝试导入 bsdddb 时出现此消息

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bsddb/__init__.py", line 67, in <module>
    import _bsddb
ImportError: No module named _bsddb

所以我跟着这个这个,所以我下载了这个包bsddb3-4.5.0.tar.gz。我想用它做什么,我尝试在正确的目录中运行 python install setup.py int bsddb3-4.5.0(我使用的是 osx)。然后我得到

Can't find a local BerkeleyDB installation.
(suggestion: try the --berkeley-db=/path/to/bsddb option)

有人可以帮忙吗?

4

4 回答 4

20

bsddb自 2.6 起已弃用。理想的是使用bsddb3 模块

我的建议,也是迄今为止最简单的选择,是安装Homebrew并使用它在您的系统上获取 BerkeleyDB:

brew install berkeley-db

在此之后使用pip安装 bsddb3

pip install bsddb3

或者下载源代码并正常安装。

python setup.py install
于 2013-06-20T12:10:57.423 回答
11

我遇到了类似的问题,但没有一个建议对我有用,因为我无法使用 AGPL 许可证或 Oracle 的商业伯克利许可证。

BERKELEYDB_DIR=$(brew --cellar)/berkeley-db/6.1.26 pip install bsddb3
Collecting bsddb3
Using cached bsddb3-6.1.1.tar.gz
Complete output from command python setup.py egg_info:
Trying to use the Berkeley DB you specified...
Detected Berkeley DB version 6.1 from db.h

******* COMPILATION ABORTED *******

You are linking a Berkeley DB version licensed under AGPL3 or have a commercial license.

AGPL3 is a strong copyleft license and derivative works must be equivalently licensed.

You have two choices:

  1. If your code is AGPL3 or you have a commercial Berkeley DB license from Oracle, please, define the environment variable 'YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION' to any value, and try to install this python library again.

  2. In any other case, you have to link to a previous version of Berkeley DB. Remove Berlekey DB version 6.x and let this python library try to locate an older version of the Berkeley DB library in your system. Alternatively, you can define the environment variable 'BERKELEYDB_DIR', or 'BERKELEYDB_INCDIR' and 'BERKELEYDB_LIBDIR', with the path of the Berkeley DB you want to use and try to install this python library again.

Sorry for the inconvenience. I am trying to protect you.

More details:

    https://forums.oracle.com/message/11184885
    http://lists.debian.org/debian-legal/2013/07/

******* COMPILATION ABORTED *******

然而,恢复到旧版本修复了它。

使用 brew 安装旧版本的 berkeley-db

brew install berkeley-db4

然后按照建议使用 pip 安装 bsddb3

pip install bsddb3

然后

BERKELEYDB_DIR=$(brew --cellar)/berkeley-db4/4.8.30 pip install bsddb3

(根据 Stefan Schmidt 的评论修改以引用较旧的 berkeley-db版本目录)

最后将补丁应用到 dbhash.py,如此处所述

于 2015-12-02T11:34:21.367 回答
7

@bamdan 的答案使用旧版本的 Berkeley DB,如果您仍想使用最新的 Berkeley DB,

  • 首先,安装最新的 Berkeley DB

    pip install berkeley-db
    
  • 二、设置环境变量YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION表明你有license

    BERKELEYDB_DIR=$(brew --cellar)/berkeley-db4/6.1.26 YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION=yes pip install bsddb3
    
于 2016-10-19T17:45:49.447 回答
0

我只是想添加一些目前缺少的东西,我是 Linux Ubuntu/Debian 用户,但我必须让我的 python 脚本在 macOS 系统上工作。我遇到了与 user1611830 遇到的相同问题。

我按照上面弗朗西斯科·罗克和肖恩解释的步骤进行操作。但是,我遇到了同样的初始问题。我看到了 Bamdan 的回答,想看看他提到的补丁,使用他提供的链接修改 dbhash.py source。但是“补丁”链接不再起作用。

我发现为了按照 source 中的说明修改 dbhash.py 需要禁用系统完整性保护,因此请按照此答案disablingSIP的说明进行操作。之后,我可以修改 dbhash.py 并且新的 bsddb3 工作,我可以使用 shelve 读取之前保存的工作空间。

于 2020-08-18T16:00:55.243 回答