0

我有一个dockerfile如下:

FROM python:3.7.5-alpine3.10

RUN apk update

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

RUN apk add --no-cache cython3

CMD [ "sh", "ls"]

当我进入带有docker run -it --rm mycontainer /bin/shcython 的容器时,似乎没有安装。我错过了什么?

/usr/src/app # which python
/usr/local/bin/python
/usr/src/app # python
Python 3.7.5 (default, Oct 21 2019, 20:13:45) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cython
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cython'
4

1 回答 1

2

Alpine 使用此路径安装了 python pacakges /usr/lib/python3.7/site-packages,只需在容器内运行命令,您将看到包已安装。只需将此路径添加到 python 搜索路径。

RUN apk add --no-cache cython3
ENV PYTHONPATH /usr/lib/python3.7/site-packages

蟒蛇路径

增加模块文件的默认搜索路径。格式与shell 的PATH 相同:一个或多个由os.pathsep 分隔的目录路径名(例如Unix 上的冒号或Windows 上的分号)。不存在的目录会被静默忽略。

除了普通目录之外,单个 PYTHONPATH 条目可能引用包含纯 Python 模块(源代码或编译形式)的 zipfile。扩展模块不能从 zip 文件中导入。

默认搜索路径取决于安装,但通常以prefix/lib/pythonversion(参见上面的 PYTHONHOME)开头。它总是附加到PYTHONPATH.

一个额外的目录将插入到前面的搜索路径中,PYTHONPATH如上面接口选项下所述。搜索路径可以在 Python 程序中作为变量进行操作 sys.path

python envvar PYTHONPATH

更新:

要使用 pip 安装,您需要使用-m.

当使用 调用时-m module-name,给定模块位于 Python 模块路径上并作为脚本执行。

python3-命令行

你可以测试

RUN apk add --no-cache cython3
ENV PYTHONPATH /usr/lib/python3.7/site-packages
RUN python -m pip install requests
RUN python -m pip list
#import test
RUN python -c "import requests"
于 2019-11-05T03:31:50.993 回答