首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python脚本中提供sys.path到docker文件

如何在python脚本中提供sys.path到docker文件
EN

Stack Overflow用户
提问于 2018-08-19 03:08:25
回答 3查看 1K关注 0票数 0

我添加了sys.path

sys.path.append("C:\\Program Files\\FME\\fmeobjects\\python27") 

在python脚本中,当我运行该脚本时,该脚本运行得很好。我并不是想要dockerize这个脚本。我的docker脚本是

FROM python:2.7-alpine

ADD test1.py /

CMD [ "python", "./test1.py" ]

它会构建镜像,但在运行镜像时会出现错误

Traceback (most recent call last):
  File "./test1.py", line 17, in <module>
    import fmeobjects
ImportError: No module named fmeobjects
EN

回答 3

Stack Overflow用户

发布于 2018-08-19 03:20:37

看起来你的脚本不能导入fmeobjects,因为它在容器之外。尝试在您添加的目录中添加fmeobjects的导入。

票数 0
EN

Stack Overflow用户

发布于 2018-08-19 03:42:14

test1.py是做什么的?

如果fmeobjects是一个包/模块,则需要如上所述添加到镜像环境中。

您还可以为它设置distutils,并且可以在映像中通过pip安装它。

实际上,正如当前构造的那样,您正在尝试导入脚本中不存在的包,因为它尚未安装。

票数 0
EN

Stack Overflow用户

发布于 2018-08-19 05:45:48

即使对于小型独立应用程序,使用标准分发工具也可以显著简化此过程。如果您的同事可能具有不同的用户名、目录布局甚至操作系统,则更是如此。不要在脚本中手动编辑sys.path

您应该编写一个使用setuptools库的setup.py文件。Complete documentation is here,但最小的示例可能如下所示:

#!/usr/bin/env python
from setuptools import setup, find_packages
setup(
    name="fmeobjects",
    version="0.1",
    packages=find_packages(),
    entry_points={
        'console_scripts': [
            'fmeobjects = fmeobjects.main:main'
        ]
    }
)

对于开发用途,创建一个virtual environment并在其中安装您的包。

virtualenv vpy
. vpy/bin/activate
pip install -e .

. activate行为您设置一些额外的环境变量,包括向您的$PATH添加虚拟环境。(source是一个等效的供应商扩展,可以在某些shell中工作;.是标准的一部分,甚至可以在最小的shell中工作,就像您在阿尔卑斯山或Busybox安装中得到的那样。)现在可以在shell提示符下运行fmeobjects,这将调用fmeobjects/main.py中的main()函数(请参见entry_points声明)。

关于如何在Docker中安装它,您有几个选择。可能最简单的方法就是导入源码树并安装它。由于Docker容器提供隔离的文件系统,并且通常只做一件事,因此在其中支持隔离的Python安装没有多大意义;只需将包安装到全局Python中即可。

FROM python:2.7
WORKDIR /usr/src/app
COPY . .
RUN pip install .
CMD ["fmeobjects"]

(如果您的虚拟环境在源代码树中,您可以在.dockerignore文件中添加vpy,使其不被复制,从而节省时间和空间。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51911765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档