Mic*_*ick 17 python requirements.txt
我希望在 GitHub 上放置一个 python 程序,并让其他人在他们的计算机上使用各种操作系统下载并运行它。我对 python 比较陌生,但使用它已经足够了,注意到让所有包含的模块的各种版本一起工作可能会有问题。我刚刚发现了使用requirements.txt(使用pipreqs命令生成和部署pip install -r /path/to/requirements.txt),但很惊讶地注意到它requirements.txt实际上并没有说明正在使用哪个版本的python,所以显然它本身并不是完整的解决方案。所以我的问题是:需要什么样的规范/文件/其他东西来确保下载我的项目的人实际上能够以最少的问题运行它。
编辑:我的计划是以得到最多票数的答案为指导。但到目前为止,在 4 个回答和 127 次观看之后,没有一个回答获得了一个赞。如果某些答案不好,那么查看一些关于为什么它们不好的评论会很有用。
小智 16
您是否考虑过设置setup.py文件?这是一种将您所有的...很好的设置捆绑到一个位置的便捷方式。因此,您的用户所要做的就是 A) 克隆您的存储库和 B) 运行pip install .以运行setup.py
这应该涵盖大多数用例。现在,如果您想让它真正可分发,那么您需要考虑在官方分发中心PyPi 中进行设置。
除此之外,如果您问如何使程序“独立于操作系统”,则没有一种适合所有人的方法。这取决于您对代码的处理方式。需要研究您的特定代码如何与这些操作系统等交互。
有很多很多很多很多很多很多很多很多方法可以做到这一点。我将滑过每个背后的原则,这是用例。
有很多方法可以做到这一点。pipenv, conda,requirments.txt等
使用其中的一些,您可以指定 python 版本。对于其他人,只需指定您知道它适用的一系列 Python 版本 - 例如,如果您使用的是 Python 3.7,则不太可能不支持 3.6;只有一两个小的变化。3.8 也应该有效。
另一种类似的方法是setup.py. 这些通常用于分发库——比如 PyInstaller(我将在下面提到的另一个解决方案)、或 numpy、或 wxPython、或 PyQt5 等——用于导入/命令行使用。python 打包指南非常有用,并且有很多教程。(google python setup.py tutorial) 您还可以在这些文件中指定要求。
Docker 是最大的。如果你没听说过,我会感到惊讶。一个摘要的快速谷歌提出了这个,我将引用其中的一部分:
那么为什么每个人都喜欢容器和 Docker?前 Parallels 服务器虚拟化 CTO 和领先的 Linux 内核开发人员 James Bottomley 解释说,VM 管理程序,例如 Hyper-V、KVM 和 Xen,都是“基于模拟虚拟硬件。这意味着它们在系统要求。”
然而,容器使用共享操作系统。这意味着它们在系统资源方面比管理程序更高效。容器不是虚拟化硬件,而是位于单个 Linux 实例之上。这意味着您可以“留下 99.9% 无用的 VM 垃圾,留下一个包含您的应用程序的小而整洁的胶囊,”
那应该为你总结一下。(请注意,容器不需要特定的操作系统。)
在撰写本文时,有 2 个主要工具可以执行此操作。PyInstaller 和 cx_Freeze。两者都在积极发展。两者都是开源的。
您获取脚本,该工具将其编译为字节码,查找导入内容,复制这些内容,并创建一个可移植的 Python 环境,该环境在目标系统上运行您的脚本,而最终用户不需要 Python。
就个人而言,我更喜欢 PyInstaller - 我是开发人员之一。PyInstaller 通过命令行脚本提供其所有功能,并支持您能想到的大多数库 - 并且可以扩展以支持更多。cx_Freeze 需要安装脚本。
这两种工具都支持 Windows、Linux、macOS 等。PyInstaller 可以创建单个文件 exe 或一个文件夹包,而 cx_Freeze 仅支持一个文件夹包。PyInstaller 3.6 支持 python 2.7 和 3.5-3.7 - 但 4.0不支持 python 2。从上一个主要版本(我认为是 6.0)开始,cx_Freeze 已经放弃了对 python 2 的支持。
无论如何,关于工具功能已经足够了;你可以自己看看这些。(有关更多信息,请参阅https://pyinstaller.org和https://cx-freeze.readthedocs.io)
使用这种分发方法时,您通常会在 GitHub 存储库上提供源代码、几个可供下载的 exe(每个平台一个)以及有关如何将代码构建为可执行文件的说明。
| 归档时间: |
|
| 查看次数: |
1992 次 |
| 最近记录: |