2

我正在尝试从包含车轮档案的本地包目录安装一些 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

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

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

4

2 回答 2

4

我不知道什么是轮子或泊坞窗,但您的错误来自用于构建模块的 Python 与尝试运行它的 Python 之间的不匹配。

于 2014-03-21T15:52:08.450 回答
1

根据我的经验,psycopg2 在从源代码安装/构建时可能相当挑剔,所以它没有打包成轮子并不奇怪。然而,你能简单地把除了 psycopg2 之外的所有东西都推开吗?仍然会为您节省大量时间。

于 2014-03-17T10:06:53.077 回答