2017-02-22 9 views
0

Моя задача - закрепить приложение фляги Python. Часть этого приложения использует sqlite для управления пользователями. Проблема, с которой я сталкиваюсь, - это python, жалуется, что не может найти дистрибутив sqlalchemy-migrate. Чтобы изолировать приложение, я написал крошечный для импорта те же модули, что и приложение.Python не может найти sqlalchemy-migrate в Docker image

from sqlalchemy import * 
from migrate import * 

import pkg_resources 

__version__ = pkg_resources.get_provider(
    pkg_resources.Requirement.parse('sqlalchemy-migrate')).version 

print __version__ 

Он не может сразу во второй строке

Step 23 : RUN python /opt/ipaccess/PresenceInsight2-1.2.1-LTE/sql_repo/test.py 
---> Running in 84cfb8cdabba 
Traceback (most recent call last): 
    File "/opt/ipaccess/PresenceInsight2-1.2.1-LTE/sql_repo/test.py", line 2, in <module> 
    from migrate import * 
    File "/usr/lib/python2.6/site-packages/migrate/__init__.py", line 14, in <module> 
    pkg_resources.Requirement.parse('sqlalchemy-migrate')).version 
    File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 176, in get_provider 
    return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0] 
    File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require 
    needed = self.resolve(parse_requirements(requirements)) 
    File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve 
    raise DistributionNotFound(req) 
pkg_resources.DistributionNotFound: sqlalchemy-migrate 
The command '/bin/sh -c python /opt/ipaccess/PresenceInsight2-1.2.1-LTE/sql_repo/test.py' returned a non-zero code: 1 

Когда я добавить команду RUN, чтобы перечислить все SQL распределения я получаю выход, который говорит мне, устанавливается распределение.

Step 23 : RUN pip list | grep sql 
---> Running in c35ef7e5217f 
You are using pip version 7.1.0, however version 9.0.1 is available. 
You should consider upgrading via the 'pip install --upgrade pip' command. 
sqlalchemy-migrate (0.10.0) 
sqlparse (0.1.18) 

Кроме того, я бросил список файлов для чего-нибудь SQL связанных и получил следующий

Step 23 : RUN ls -Rtl /usr/lib/python2.6/site-packages | grep sql 
---> Running in f342ebceb1a0 
drwxr-xr-x 2 root root 146 Feb 22 11:43 sqlalchemy_migrate-0.10.0.dist-info 
drwxr-xr-x 3 root root 4096 Feb 22 11:43 sqlparse 
drwxr-xr-x 2 root root 112 Feb 22 11:43 sqlparse-0.1.18-py2.6.egg-info 
drwxr-xr-x 2 root root 78 Feb 22 11:42 flask_sqlalchemy 
-rw-r--r-- 1 root root 14357 Feb 22 11:43 ansisql.pyc 
-rw-r--r-- 1 root root 11422 Feb 22 11:42 ansisql.py 
-rw-r--r-- 1 root root 3758 Feb 22 11:43 mysql.pyc 
-rw-r--r-- 1 root root 10678 Feb 22 11:43 sqlite.pyc 
-rw-r--r-- 1 root root 2164 Feb 22 11:42 mysql.py 
-rw-r--r-- 1 root root 7967 Feb 22 11:42 sqlite.py 
-rw-r--r-- 1 root root 2387 Feb 22 11:43 sql.pyc 
-rw-r--r-- 1 root root 2802 Feb 22 11:42 sql.py 
drwxr-xr-x 2 root root 49 Feb 22 11:43 sql_script 
/usr/lib/python2.6/site-packages/migrate/versioning/templates/sql_script: 
/usr/lib/python2.6/site-packages/sqlalchemy_migrate-0.10.0.dist-info: 
/usr/lib/python2.6/site-packages/sqlparse: 
-rw-r--r-- 1 root root 26788 Feb 22 11:43 sql.pyc 
-rw-r--r-- 1 root root 20897 Feb 22 11:42 sql.py 
/usr/lib/python2.6/site-packages/sqlparse/engine: 
/usr/lib/python2.6/site-packages/sqlparse-0.1.18-py2.6.egg-info: 
drwxr-xr-x 2 root root 103 Feb 22 11:42 sqlalchemy 
/usr/lib/python2.6/site-packages/wtforms/ext/sqlalchemy: 
/usr/lib/python2.6/site-packages/flask_sqlalchemy: 
-rw-r--r-- 2 root root 4737 Jul 1 2015 sqlitelockfile.pyc 
-rw-r--r-- 2 root root 4737 Jul 1 2015 sqlitelockfile.pyo 
-rw-r--r-- 1 root root 5540 Jun 30 2015 sqlitelockfile.py 
-rw-r--r-- 1 root root 55184 Jul 12 2016 sqlitesack.pyc 
-rw-r--r-- 1 root root 54756 Jul 12 2016 sqlitesack.pyo 
-rw-r--r-- 2 root root 5789 Jul 12 2016 sqlutils.pyc 
-rw-r--r-- 2 root root 5789 Jul 12 2016 sqlutils.pyo 
-rwxr-xr-x 1 root root 70422 Jul 12 2016 sqlitesack.py 
-rwxr-xr-x 1 root root 6422 Jul 12 2016 sqlutils.py 
---> 83d8f4a1d247 

Мой Dockerfile

FROM centos:6.8 

MAINTAINER Carl Wainwright 

RUN yum -y install epel-release && yum clean all 
# Install python dependencies 
RUN \ 
    yum update -y && yum -y install openldap-servers openldap-clients expect python-devel \ 
            openldap-devel mysql-devel libselinux-python python-pip \ 
            libssl-devel libffi-devel gcc vim \ 
    yum clean all 

ENV APP_NAME presenceinsight2 
ENV DIST_NAME PresenceInsight2 
ENV APP_VER 1.2.1-LTE 
ENV FULL_APP_NAME $DIST_NAME-$APP_VER 
ENV TARGET_PATH /opt/ipaccess 
ENV APP_TARGET_PATH $TARGET_PATH/$FULL_APP_NAME 
ENV SQL_REPO $TARGET_PATH/$FULL_APP_NAME/sql_repo/ 
ENV CONF_PATH /etc/$APP_NAME 
ENV LOG_PATH /var/log/$APP_NAME 

RUN \ 
    mkdir -p $APP_TARGET_PATH \ 
    mkdir -p $CONF_PATH \ 
    mkdir -p $LOG_PATH \ 
    useradd prsncins 

WORKDIR $APP_TARGET_PATH 

COPY centos_install_slapd.sh /tmp/centos_install_slapd.sh 

RUN /tmp/centos_install_slapd.sh presencecell --create_certificate 
RUN /tmp/centos_install_slapd.sh presencecell --update_config --unattended 

# Setup DB 
COPY sql_repo $SQL_REPO 
COPY requirements.txt $APP_TARGET_PATH 

RUN pip install -r requirements.txt 

# Test script (which fails) 
RUN python /opt/ipaccess/PresenceInsight2-1.2.1-LTE/sql_repo/test.py 

RUN \ 
    python $APP_TARGET_PATH/sql_repo/manage.py version_control --repository=sql_repo --url=sqlite:///$CONF_PATH/app.db \ 
    touch $APP_TARGET_PATH/db-version-control-run.txt \ 
    python $APP_TARGET_PATH/sql_repo/manage.py db_version --repository=sql_repo --url=sqlite:///$CONF_PATH/app.db \ 
    python $APP_TARGET_PATH/sql_repo/manage.py upgrade --repository=sql_repo --url=sqlite:///$CONF_PATH/app.db 

# Install application 
COPY dist/$FULL_APP_NAME.tar.gz /tmp/ 

RUN tar zxvf /tmp/$FULL_APP_NAME.tar.gz -C $TARGET_PATH/ 

EXPOSE 8484 

CMD python app/run.py 

Любые идеи, почему это происходит сбой в Докер?

Если я настроил virtualenv на своем локальном компьютере и установил одинаковые дистрибутивы, скрипт test.py будет успешно выполнен.

+0

Показать файл Dockerfile, и вы можете запустить docker -it your_image bash, а затем проверить, что ваши файлы присутствуют (или нет). – user2915097

+0

Добавлен файл Dockerfile. Я не могу запустить изображение, так как он не смог построить, хотя я мог бы теоретически прокомментировать все, начиная с момента завершения процесса сборки, - что я попробую сейчас. –

+0

Так я и сделал, как я предложил, и смог вбить изображение. Я могу подтвердить, что дистрибутив sqlalchemy-migrate присутствует с помощью команды «pip list». Кроме того, я подтвердил, что для этого дистрибутива есть папка под «/usr/lib/python2.6/site-packages/». Sqlalchemy_migrate-0.10.0.dist-info ' –

ответ

0

Я полагаю, что ваш PYTHONPATH установлен неправильно, и у вас могут быть установлены файлы, но он не смотрит в нужное место.

+0

PYTHONPATH не установлен (то же самое касается моего virtualenv). Вывод 'того, что python' указывает на _/usr/bin/python_ –

+0

Я запускал python с подробными настройками и, как ни странно, я вижу, что импорт sqlalchemy и migrate идет нормально до тех пор, пока он не импортирует' migrate.changeset.databases.ibmdb2 ' –

Смежные вопросы