在开发系统上未安装 PostgreSQL 时将 psycopg2 安装到 virtualenv

Posted

技术标签:

【中文标题】在开发系统上未安装 PostgreSQL 时将 psycopg2 安装到 virtualenv【英文标题】:Installing psycopg2 into virtualenv when PostgreSQL is not installed on development system 【发布时间】:2011-08-03 12:23:05 【问题描述】:

如果我的开发系统(装有 OS X 10.6 的 MacBook Pro)上未安装 PostgreSQL,是否可以将 psycopg2 安装到 virtualenv 中?

当我在 virtualenv 中运行 pip install psycopg2 时,我收到了如下所示的错误。

我正在尝试使用 Django 连接到服务器上的旧数据库,如果可能的话,我不希望在我的开发系统上安装 PostgreSQL。

为什么不安装 PostgreSQL?

我在使用自制软件安装 PostgreSQL 时收到错误消息。我的 MacBook Pro 上安装了 Xcode4,而且只有 Xcode4,我认为这与缺少 gcc 4.0 有关。但是,这是另一个 *** 问题的问题。

2011 年 4 月 12 日上午 8:37 更新:我仍然想知道在我的 MacBook Pro 上不安装 PostgreSQL 的情况下是否可以这样做。但是,我运行brew update 并强制使用brew install --force ossp-uuid 重新安装ossp-uuid,现在brew install postgresql 可以工作。成功安装 PostgreSQL 后,我可以在我的 virtualenv 中pip install psycopg2

来自pip install psycopg2 的错误

$ pip install psycopg2
Downloading/unpacking psycopg2
  Running setup.py egg_info for package psycopg2

    Error: pg_config executable not found.

    Please add the directory containing pg_config to the PATH
    or specify the full executable path with the option:

        python setup.py build_ext --pg-config /path/to/pg_config build ...

    or with the pg_config option in 'setup.cfg'.
    Complete output from command python setup.py egg_info:
    running egg_info

writing pip-egg-info/psycopg2.egg-info/PKG-INFO
writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
warning: manifest_maker: standard file '-c' not found

Error: pg_config executable not found.

Please add the directory containing pg_config to the PATH
or specify the full executable path with the option:

    python setup.py build_ext --pg-config /path/to/pg_config build ...

or with the pg_config option in 'setup.cfg'.

----------------------------------------
Command python setup.py egg_info failed with error code 1
Storing complete log in /Users/matthew/.pip/pip.log

初步研究

以下是我作为初步研究阅读的文章:

Installing psycopg2 to use Django with PostgreSQL on OS X Installing psycopg2 on OS X Using psycopg2 with virtualenv on Ubuntu JauntyLucid Postgres, psycopg2, virtualenv install hints

【问题讨论】:

在这里查看正确答案:***.com/questions/5420789/… 该问题的答案适用于 debian/ubuntu,因此如果您使用的是 osx,则无济于事。 在 Centos 6 和 Postgres 9.1 上,在你的 virtualenv 中设置正确的 pg_config 路径:export PATH=/usr/pgsql-9.1/bin:"$PATH" 安装 PostgreSQL 不应该是开发 django 的必要条件。我们需要这样做,因为服务器的 requirements.txt 列出了 psycopg,而我们从未在本地使用它。这一切都过于紧密耦合并导致很多配置问题。 哇,这篇关于 Mac 设置上的 virtualenv 细节的帖子没有一个答案。如果我错了,请纠正我。 【参考方案1】:

psycopg 依赖于pg_config 命令,如果没有,则无法安装 psycopg。

如果系统安装对您来说是个问题,为什么不尝试编译 PostgreSQL 并将生成的 bin 文件包含在您的 $PATH 中?喜欢:

export PATH=/path/to/compiled/postgresql/bin:"$PATH"
pip install psycopg2

【讨论】:

“pip install psycopg”不再起作用(错误 404),请改用 “pip install psycopg2” 如果您使用的是 Mac。然后,使用命令“locate pg_config”来查找路径。在我的 OSX Mavericks 中,通过 Port 安装了 Postgresql,路径是 /opt/local/lib/postgresql92/bin 也适用于 Windows! +1 locate postgres 可以帮助您找到编译后的 postgreSQL bin 的路径 我没有 pg_config 并且一直在使用 psycopg2 运行。这已经过时了。【参考方案2】:

您不需要安装完整的 PostgreSQL:您只需要客户端库。

【讨论】:

您对在 OS X 上安装 PostgreSQL 客户端库有什么建议吗? 我没有建议,我不是 OS X 用户。 fink 构建使用 postgresql90-dev 构建(可能用于 .h)和 postgresql90-shlibs(可能用于 libpq),但我不知道如何对这个选项进行排名 w.r.t。其他软件包(我不知道)或从源代码构建 libpq。参考。 fink.cvs.sourceforge.net/fink/dists/10.4/unstable/main/finkinfo/…【参考方案3】:

使用您在 4 月 12 日更新中描述的方法,我能够安装 PostgreSQL(+1)。请注意,我最初运行的是 Python 2.7.1(32 位),而自制软件在使用 32 位版本的 Python 时抛出了几个错误和警告。我已经切换了 2.7.1 的 64/32 位版本,它就像一个冠军。

关于 pyscopg2,我可以通过编辑 setup.cfg 将它从源代码安装到我的虚拟环境中。我将 pg_config 设置为正确的 homebrew 酒窖内的路径(pg_config=/usr/local/Cellar/postgresql/9.0.4/bin/pg_config)。保存更改后,我运行 python setup.py install 零问题。值得注意的是,我确实没有将 Mac 的默认 python 设置设置为 32 位。我从头到尾都使用了新的 64 位。

查看了一些文档后,我想如果我将 homebrew 的 postgresql 路径添加到系统路径中,我可以使用 pip 来安装它。

参考:http://favosdream.blogspot.com/2009/09/make-psycopg2-and-readline-work-in-snow.html

2011 年 6 月 8 日更新: 在将在 OS X 上编写的项目移植到 Windows 7 时,我发现我也必须在 Windows 上安装 PostgreSQL。这最终在我的启动屏幕上创建了另一个用户以及其他我不喜欢的东西。在进行一些挖掘时,我发现了 PostgreSQL here 的 Windows 驱动程序。此后,我卸载了完整的 PostgreSQL 并安装了 ODBC 驱动程序,到目前为止,这些驱动程序运行良好。

为了解决最初的问题,在进行了更多挖掘之后,我想我找到了适用于 OS X here 的等效 ODBC。我还没有机会试用它们,但这个概念在 Windows 7 上运行良好。当我有机会试用它们时,我会更新它。在那之前,我希望这会有所帮助。

【讨论】:

在 Windows 上,您不需要安装 Postgresql,只需将二进制文件放在路径中即可。这可以通过下载二进制文件enterprisedb.com/products-services-training/pgbindownload 的 zip 文件并将该目录添加到您的路径(即更改 PATH 环境变量)来完成。将它们复制到安全/已知的地方,然后再添加让生活更轻松的路径! @wcdolphin 感谢您的意见。那肯定会让生活更轻松。【参考方案4】:
apt-get install libpq-dev

在 debian 压缩方面帮助我

【讨论】:

也许还有apt-get install python-dev【参考方案5】:
apt-get install libpq-dev

在 debian 压缩中也帮助了我。之后执行 pip install psycopg2。我在 heroku 上设置环境时遇到 pg_config not found 问题,现在它工作正常。

【讨论】:

【参考方案6】:

您需要安装python-dev 软件包才能使用psycopg2 等python 扩展。我不知道如何在 mac 中安装包,但我运行以下命令在我的 Ubuntu 机器上安装 python 包。

sudo apt-get install python-dev 

或者

sudo apt-get install python3-dev

如果您使用的是 Python3.x。

安装完成后,在您的虚拟环境中运行以下命令。

pip install psycopg2

【讨论】:

【参考方案7】:

因为我从来不需要在这台服务器上安装 postgresql 数据库,所以在同一台服务器上运行 pip install psycopg2 之前,我在 Ubuntu 14_04 版本上安装了以下库

apt-get install libpq-dev python-dev 然后在虚拟环境中执行 pip install psycopg2。

输出 收集 psycopg2 使用缓存的 psycopg2-2.6.1.tar.gz 为收集的包裹建造***:psycopg2 为 psycopg2 运行 setup.py bdist_wheel 存放在目录:/root/.cache/pip/wheels/e2/9a/5e/7b620848bbc7cfb9084aafea077be11618c2b5067bd532f329 成功构建 psycopg2 安装收集的包:psycopg2 成功安装 psycopg2-2.6.1

【讨论】:

【参考方案8】:

我在 MAC OSX 中解决了这个问题:

$ wget https://ftp.postgresql.org/pub/source/v9.5.3/postgresql-9.5.3.tar.bz2
$ tar xfv postgresql-9.5.3.tar.bz2
$ cd postgresql-9.5.3
$ ./configure
$ make
$ cd src/bin/pg_config
$ export PATH=`pwd`:"$PATH"
$ pip install psycopg2

【讨论】:

这似乎正确地回答了最初的问题。 pip会不会把libpq静态编译成psycopg2,也就是说postgresql安装之后可以去掉吗? 作为替代方案,只需执行pip install psycopg2-binary【参考方案9】:
brew install postgresql

export LDFLAGS="-L/usr/local/opt/openssl/lib"

export CPPFLAGS="-I/usr/local/opt/openssl/include"

pip3 install psycopg2

【讨论】:

由于某种原因,这在 Mac OS X 上对我有用,而其他几个解决方案却没有。我已经在我的 PATH 上安装了 postgresql 和 pg_config,但是在安装 psycopg2 时仍然遇到同样的错误。两条export 行为我解决了这个问题。 在解决这个错误几个小时后,这个解决方案解决了我的问题。谢谢。 有人能解释一下为什么会这样吗? openssl 在这里做什么? @AnantaKRoy openssl 是 psycopg 与 postgres 的安全 ssl 连接所必需的。标志是这里的关键。 Apple 已经在 openssl 周围移动,设置正在其他地方寻找它们。【参考方案10】:

使用pip install psycopg2-binary,当pip install psycopg2 不起作用时,它对我有用。

【讨论】:

这个解决方案适合我【参考方案11】:

以上所有内容都不适合我(OS Catalina 10.15.1)

与经典的postgreshomebrew 版本存在冲突。 请通过命令删除自制版本

$ brew uninstall postgresql

然后从official website安装它:

$ sudo mkdir -p /etc/paths.d && echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp

这是一个简单的psycopg2 install 或django-heroku 包的实际应用。

【讨论】:

【参考方案12】:

我知道您要的是开发环境,但如果您要在服务器上部署,请说 Heroku。 只需在项目的 requirements.txt 中添加以下行。

django-heroku==0.3.1

因为这个包本身会在服务器部署上安装所需的包,如 psycopg2

【讨论】:

【参考方案13】:

我偶然解决了这个问题:

brew install psycopg2

而不是

pip install psycopg2

【讨论】:

【参考方案14】:

如果您最近更新了 python 或更改了默认 python(比如说从 3.6 到 3.8)。以下代码

sudo apt-get install python-dev   OR    sudo apt-get install python3-dev

将为以前的 python 版本安装/工作。

因此,如果您希望此命令适用于最近更新/更改的 python 版本,请尝试在类似命令中提及特定版本(如 python3.8)

sudo apt-get install python3.8-dev  

在上面尝试以下

pip install wheel
export PATH=/path/to/compiled/postgresql/bin:"$PATH"
sudo apt-get install libpq-dev
sudo apt-get install python3.x-dev    **Change x with your version, eg python3.8**
pip install psycopg2-binary
pip install psycopg2

【讨论】:

以上是关于在开发系统上未安装 PostgreSQL 时将 psycopg2 安装到 virtualenv的主要内容,如果未能解决你的问题,请参考以下文章

在Win2008R2上安装vCenter6.7出现“系统上未安装通用C运行时。您可以从Microsoft网站上下载并安装”错误的解决办法

在同一系统上安装多个 postgreSQL

在CentOS 7.9上未找到man手册,怎么解决?

在CentOS 7.9上未找到man手册,怎么解决?

PostgreSQL - 我有啥办法可以定义一个在插入或更新时将空字符串转换为 null 的列?

Mac 上未识别 Ruby 版本