【问题标题】:Best way to deploy a python command line script?部署 python 命令行脚本的最佳方法?
【发布时间】:2020-08-03 12:09:22
【问题描述】:

我用 python 编写了一个 linux 文件传输脚本,它接受多个命令行/终端参数。它可以在我的开发机器上运行,但是当我尝试在我的公司系统上运行它时,由于没有安装相同版本的 python 或所有库而出现几个错误。

一个小时的谷歌搜索让我的初学者睁开了眼界,了解了部署方法、容器、虚拟化、冻结等方面的世界。除了一夜之间成为 docker 专家之外,让这个脚本在任何地方运行的最简单方法是什么?

【问题讨论】:

  • 更好的方法之一是将 python 脚本作为 systemd 服务运行。
  • 查看virtualenv 的具体情况。

标签: python shell deployment terminal containers


【解决方案1】:

如果您想避免虚拟化/Docker(这对我来说似乎没问题),您可能至少希望使用具有冻结依赖项的 venv 模块。您可以使用pip 提供适当的setup.py 文件轻松地直接从源代码部署(无需打包)。

我长期使用这种方法,在许多服务器和许多不同的环境上进行了许多部署。有几件事情需要考虑:

  • 您的代码需要与目标机器上可用的 Python 兼容。我主要使用 Debian,所以我的代码必须经常向后兼容(Debian 相当保守)。

  • 您需要确保在部署期间安装的依赖项版本可以与您的脚本配合使用。最简单的方法是冻结 setup.py 中的模块版本,但我一般不会这样做 - 较新的库版本通常可以工作。

  • 为每个项目(通常为每个存储库)分隔 venv 以避免冲突。在我早期的 hPython 冒险中,我使用了一个 uber-virtualenv,但它完全是一团糟。如今,多使用几兆字节来分隔环境已经不是什么大问题了。

  • 自动化部署(Ansible、Chef 等)来做无聊的事情,永远不要忘记重要的事情。我使用 Ansible 来做很少重复的事情,比如系统配置(包、库、配置文件),用 Jenkins 来做重复的事情,比如项目部署(就像在适当的虚拟环境中运行 pip 一样简单)。

  • 对于类似守护进程的脚本(Web 服务器、看门狗等),我使用的是 supervisor,它不仅适用于 Python 脚本。

【讨论】:

  • 谢谢。我在这里找到了一个 venv 教程,realpython.com/python-virtual-environments-a-primer,我似乎仍然不明白的唯一部分是,一旦你设置了虚拟环境,你将如何将它“导出”到可以从终端调用的单个文件中,或者你会将所有内容包装在 bash 脚本中?
  • 你不导出 virtualenv,你只是使用它。您可以激活虚拟 env 来运行脚本,或者您可以使用 venv 的 Python(位于 bin/python 下)通过使用解释器的完整路径 (/my/path/to/venv/bin/python myscript.py) 执行脚本。这种方法非常安全,不需要你玩shebang。
猜你喜欢
  • 2021-03-15
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多