通过Dockerfile中的pip
安装Python包时,例如:
pip install --trusted-host pypi.python.org -r requirements.txt
使用requirements.txt
,例如:
python-dotenv>=0.15.0
psycopg2>=2.8.6
sqlalchemy>=1.3.22
numpy>=1.19.0
rasterio>=1.1.8
pandas>=1.1.5
geopandas>=0.8.1
matplotlib>=3.3.0
seaborn>=0.11.0
我最近看到这样的警告:
WARNING: Running pip as the 'root' user can result in broken permissions
and conflicting behavior with the system package manager.
It is recommended to use a virtual environment
instead: https://pip.pypa.io/warnings/venv
因此,我提出了一个“天真”的问题:
设置虚拟环境/或以非root用户(Docker中的默认用户)身份安装Python包是否有意义,就像在本地计算机上通常所做的那样?
就目前而言,我从来都不关心这个问题,因为我在一个Docker容器中,根据定义,它承载一个应用程序,所以我认为这些包在全球范围内安装是完全可以的。希望我不能在本地机器上破坏任何东西
以root用户身份运行pip或全局安装软件包不是最佳做法。最佳实践是在项目中创建虚拟环境,并在其中安装每个软件包
如果全局安装,它实际上会影响其他项目,因为您可能不需要为即将启动的项目B中的项目A安装的包,并且如果删除所有包,项目A将中断,因为它无法再次访问这些包
为您的所有项目提供虚拟环境,这样,您就可以放心,所有项目都不会相互影响
老实说?没什么大不了的
在容器的构建过程中使用root用户通常是必要的,也是预期的。来自pip的警告是“以root用户身份运行pip可能会破坏您的操作系统程序所依赖的包”——但您的容器中没有操作系统
如果您在构建结束时或docker运行期间遇到权限较低的用户,则以root用户身份安装包不会对您造成任何伤害。实际上,容器是一个进程(您的python应用程序),它的文件系统视图与根系统不同——非常像virtualenv试图实现的
正如@paulbecotte在his answer中所说的,在容器中全局安装包是没有风险的,但是您看到了这个警告,因为pip并不关心您是否在容器中运行
python的一般良好实践是以非特权用户身份创建虚拟环境:
$ python -m venv .venv
然后激活它:
$ source .venv/bin/activate
然后使用
$ pip install -r requirements.txt
命令安装软件包您可以完全根据docker构建语法进行调整:
但是,docker的一般良好实践是与非特权用户一起运行。所以你在这里有多项选择:
相关问题 更多 >
编程相关推荐