从“轮子”安装时加载psycopg2模块时出错。

时间:2014-03-17 09:38:08

标签: pip docker psycopg2 python-wheel

我正在尝试从包含wheel存档的本地包目录安装一些python需求。我在Docker容器中安装需求。

我正在遵循的步骤是:

$ pip install wheel
# wheel runs, outputs .whl files to wheelhouse directory
$ pip wheel --wheel-dir wheelhouse -r requirements.txt

然后,在我的Dockerfile

ADD requirements.txt /tmp/requirements.txt
ADD wheelhouse /tmp/wheelhouse
# install requirements. Leave file in /tmp for now - may be useful.
RUN pip install --use-wheel --no-index --find-link /tmp/wheelhouse/ -r /tmp/requirements.txt

这样做 - 并且所有要求都已正确安装:

# 'app' is the name of my built docker image
$ docker run app pip list
...
psycopg2 (2.5.1)
...

但是,如果我实际尝试在使用 psycopg2的容器内运行某些内容,那么我会得到以下内容:

Error loading psycopg2 module: /usr/local/lib/python2.7/site-packages/psycopg2/_psycopg.so: undefined symbol: PyUnicodeUCS4_AsUTF8String

我认为这与轮子的构建方式有关 - 我在容器主机(Ubuntu 12.04)上运行pip wheel

如何解决这个问题 - 使用轮子可以大大减少构建容器映像所需的时间,所以如果可以帮助我,我不想恢复安装包?

2 个答案:

答案 0 :(得分:4)

我不知道轮子或码头是什么,但是你的错误来自用于构建模块的Python和试图运行它的Python之间的不匹配。

答案 1 :(得分:1)

根据我的经验,从源代码安装/构建时,psycopg2可能相当挑剔,因此不会因为它没有包装成轮子而感到惊讶。但是,你能简单地将所有东西从psycopg2中分离出来吗?仍然会为你节省一大堆时间。