FreeBSD 上 virtualenv 中的 pysqlite 安装错误

FreeBSD 上 virtualenv 中的 pysqlite 安装错误

我正在尝试在 FreeBSD 7.3 中的 virtualenv 下使用 pip 安装 pysqlite,Python 版本为 2.6.2。我在安装其他软件包(如 Django、PIL 等)时没有遇到任何问题。所有这些软件包都是我在激活 virtualenv 后安装的。但我得到了一个巨大的错误pip install sqlite。这是错误的尾部

src/module.c:426: warning: implicit declaration of function 'sqlite3_libversion'
src/module.c:426: warning: passing argument 1 of 'PyString_FromString' makes pointer from integer without a cast
error: command 'gcc' failed with exit status 1
Command /usr/home/myuser/python-sites/virtpython/bin/python -c "import setuptools;__file__='/usr/home/myuser/python-sites/virtpython/build/pysqlite/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /usr/tmp/pip-N3U6Px-record/install-record.txt --single-version-externally-managed --install-headers /usr/home/myuser/python-sites/virtpython/include/site/python2.6 failed with error code 1 in /usr/home/myuser/python-sites/virtpython/build/pysqlite
Exception information:
Traceback (most recent call last):
  File "/usr/home/myuser/python-sites/virtpython/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/basecommand.py", line 107, in main
    status = self.run(options, args)
  File "/usr/home/myuser/python-sites/virtpython/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/commands/install.py", line 261, in run
    requirement_set.install(install_options, global_options)
  File "/usr/home/myuser/python-sites/virtpython/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/req.py", line 1166, in install
    requirement.install(install_options, global_options)
  File "/usr/home/myuser/python-sites/virtpython/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/req.py", line 589, in install
    cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)
  File "/usr/home/myuser/python-sites/virtpython/lib/python2.6/site-packages/pip-1.2.1-py2.6.egg/pip/util.py", line 612, in call_subprocess
    % (command_desc, proc.returncode, cwd))
InstallationError: Command /usr/home/myuser/python-sites/virtpython/bin/python -c "import setuptools;__file__='/usr/home/myuser/python-sites/virtpython/build/pysqlite/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /usr/tmp/pip-N3U6Px-record/install-record.txt --single-version-externally-managed --install-headers /usr/home/myuser/python-sites/virtpython/include/site/python2.6 failed with error code 1 in /usr/home/myuser/python-sites/virtpython/build/pysqlite

'virtpython' 是我的 virtualenv

% pkg_info | grep sqlite
sqlite-2.8.17_1     An SQL database engine in a C library
sqlite3-3.6.11      An SQL database engine in a C library

如果有 FreeBSD 的 sqlite 开发包,我在哪里可以找到它?或者问题是别的??

答案1

我遇到了类似的问题,我找到的唯一解决方案是进入 pip 构建目录(/tmp/pip-{random hash},通常可以在错误的尾部找到,也可以是 /usr/tmp/ 或命名为 pysqlite,取决于您的设置)并更改 pysqlite setup.cfg。下载后看起来像这样:

[build_ext]
#define=
#include_dirs=/usr/local/include
#library_dirs=/usr/local/lib
libraries=sqlite3
define=SQLITE_OMIT_LOAD_EXTENSION

当我取消注释 include_dirs 和 library_dirs 时,pysqlite 将安装正常。这样做的缺点是,我还没有找到一种方法来轻松自动化此步骤,因此需要在设置每个 virtualenv 时完成此操作。它很丑陋,令人不愉快,而且很痛苦,但它确实可以安装 pysqlite。

希望这可以帮助。

PS 如果您尝试在 virtualenv 中运行 pip install,下载的文件可能会在 {virtualenv}/build/pysqlite 中找到。

答案2

我尝试在 Debian wheezy 上的 virtualenv 中安装 pysqlite 时遇到了类似的问题。

我找到了这篇文章:

其中提到我可能需要在 Debian 上安装 dev 版本libsqlite3以允许在 virtualenv 中安装 pysqlite:

sudo apt-get install libsqlite3-dev

我尝试了这个,突然 pysqlite 在我的 virtualenv 中安装得很好。

答案3

我不知道这是否能回答你的问题。这正是我想要尝试的。

  1. 尝试通过指定版本来安装早期版本的 sqlite,例如:

    pip install sqlite==2.7
    
  2. 尝试从 tarball 构建 sqlite。只是看看问题是否出在您的系统设置中。如果是的话,直接用这种方式调试可能更容易,无需pip.一旦解决了,pip也应该能够做到这一点,或者至少你会知道你的 pip 设置中有问题。

答案4

这已经足够好了。首先下载并编译 sqlite 到本地计算机(而不是虚拟机)。 sudo pip install sqlite应该讽刺地这样做。现在将以下内容添加到您的~/.pydistutils.cfg

## Exclusively here to allow pysqlite to compile in a venv.
[build_ext]
include_dirs=/usr/local/include
library_dirs=/usr/local/lib

venv 内的 pip 现在将针对 /usr/local/lib 编译 pysqlite。这可能打破隔离 - pysqlite 依赖于 venv 之外的库。如果这让你烦恼,恐怕最好的选择是监狱或 LXC

相关内容