Python无法在Docker镜像中findsqlalchemy-migrate

我的任务是Dockerize一个Python烧瓶应用程序。 这个应用程序的一部分使用sqlite来pipe理用户。 我正面临的问题是python抱怨,它无法findsqlalchemy-migrate分配。 为了隔离应用程序,我写了一个小程序来导入与应用程序相同的模块。

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 

任何想法,为什么这是在Docker失败?

如果我在本地机器上安装virtualenv并安装相同的pip分发,则test.py脚本将成功执行。

我的猜测是你的PYTHONPATH没有正确设置,你可能已经安装了这些文件,但是它没有看到正确的位置。