我有一个docker文件,如下所示:
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/sh
容器时,cython似乎没有安装。我错过了什么?
/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'
Alpine 使用此路径安装了 python pacakges/usr/lib/python3.7/site-packages
,只需在容器内运行命令,您将看到软件包已安装。只需将此路径添加到 python 搜索路径即可。
RUN apk add --no-cache cython3
ENV PYTHONPATH /usr/lib/python3.7/site-packages
蟒蛇路径
扩充模块文件的默认搜索路径。格式为 与外壳的 PATH 相同:一个或多个目录路径名,由 os.pathsep(例如Unix上的冒号或Windows上的分号)。 不存在的目录将被静默忽略。
除了普通目录之外,单个 PYTHONPATH 条目可以 参考包含纯 Python 模块的 zip 文件(在源代码或 编译形式)。扩展模块不能从 zip 文件导入。
默认搜索路径取决于安装,但通常 以
prefix/lib/pythonversion
开头(参见上面的 PYTHONHOME)。是的 总是附加到PYTHONPATH
.将在前面的搜索路径中插入一个附加目录
PYTHONPATH
,如上述接口选项中所述。搜索 路径可以从 Python 程序中作为变量进行操作sys.path
.
python envvar PYTHONPATH
更新:
要使用 pip 安装,您需要使用-m
.
当用
-m module-name
调用时,给定的模块位于Python 模块路径并作为脚本执行。
python3-cmdline
你可以测试
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"