【问题标题】:How a command is created and added to the path in a python repo如何创建命令并将其添加到 python 存储库中的路径
【发布时间】:2020-08-23 22:50:49
【问题描述】:

我正在开发一个 git repo https://opendev.org/airship/promenade 它在基础 python 图像上创建了一个图像长廊。 在图像内部,它会创建一个可执行的 /usr/local/bin/promenade,它是一个 python 脚本,是运行图像的主要命令。 我想了解此图像如何将 /usr/local/bin/promenade 添加为可执行文件以及它如何调用其他模块 任何帮助将不胜感激,我已经完成了 setup.py 和 pip install 的所有基础知识,但无法弄清楚

【问题讨论】:

标签: python python-3.x docker pip


【解决方案1】:

Docker 容器的一个非常典型的设置是使用语言运行时的本机打包工具,然后在Dockerfile 中执行必要的最低操作以使用它安装应用程序。这就是这里发生的事情。

Python packaging environment 的核心是一个脚本setup.py,它描述了如何安装包。在这个存储库中,setup.py 使用了一个名为pbr 的包,它将大部分设置移动到一个非代码配置文件setup.cfg。包含一个块:

[entry_points]
console_scripts =
    promenade=promenade.cli:promenade

console_scripts 是 Python setuptools 库的标准部分。当您运行pip install(或./setup.py install)时,它会在当前安装的bin 目录中创建一个名为promenade 的包装脚本。该脚本只是启动 Python,导入 promenade.cli 模块,并在其中调用 promenade() 函数。

如果您对此有本地结帐,则可以使用 Python 虚拟环境查看:

# Create a new virtual environment
python3 -m venv venv

# Install this package in that virtual environment
./venv/bin/pip install .

# See the new wrapper script
ls -l ./venv/bin/promenade

在 Docker 上下文中,您通常不使用虚拟环境:Docker 镜像与主机系统隔离,并且通常只在镜像中安装单个应用程序,因此如果您使用“系统”蟒蛇。该存储库中的Dockerfile 实际上只是运行pip

COPY . /opt/promenade
RUN pip install -e /opt/promenade

没有虚拟环境,系统python的pip install一般会在/usr/local/bin中安装这些控制台脚本,所以最后一行会创建/usr/local/bin/promenade包装器。

【讨论】:

  • 谢谢大卫,这就是我要找的答案,在谷歌搜索很多都无法给出这个解释,非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2017-09-04
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多