【问题标题】:How can I include a pip installed module with my python script?如何在我的 python 脚本中包含一个 pip 安装的模块?
【发布时间】:2018-05-22 02:46:40
【问题描述】:

我在 Python 3.6 中编写了一个使用模块 pycryptodome 的加密程序,特别是这些导入:

from Crypto.Cipher import AES
from Crypto.Hash import SHA256
from Crypto.Random import get_random_bytes

该程序可以运行,但如果用户自己安装了pycryptodome 模块,它就无法使用。

有没有办法以某种方式包含该软件包,或者我可以创建一个“首次安装”来为最终用户安装它?

【问题讨论】:

  • 您可以复制所有加密文件并将它们与您的脚本一起发送,但我认为只有“首次设置”功能会更有意义。
  • 您的项目是否也托管在 pip 上?
  • 首先,我建议使用密码学而不是 pycryptodome。其次,有两种选择:1)Python 打包,需要用户安装 Python;2)PyInstaller。
  • 我的项目没有托管在 pip 上。我刚刚开始使用 Python 的社区功能,还不确定其中大部分是如何工作的。
  • 对于分发,我推荐PyInstaller,但如果你是围绕源代码发布,那么我推荐using a requirements file with pip。如果这对您的用户来说太难管理并且他们信任您,那么如果导入失败,也许您可​​以this answer 安装所需的模块。

标签: python python-module end-user


【解决方案1】:

简短的回答——正如 cmets 中已经提到的——你需要打包你的脚本。


长答案 - 我以前第一次来过 - 很烦人。他们打包 Python 模块和脚本的方式在不断发展,并不是所有可用的文档都保持最新。您可以轻松地最终阅读最近的文档,这些文档在阅读时已经存在缺陷(即已过时)。

最简单的方法,不用一直往下走,就是一个简单的pip 文件,它描述了你的项目的依赖关系。它被称为requirements.txt。最新信息可以在here找到。

如果这还不够,您必须打包您的应用程序。可以在here 找到一个很好但很少维护且有些过时的概述/介绍。这是一个很好的开始,但不要试图遵循它!另一个常被引用的初学者的过时手册可以找到here。阅读它以获得基本的理解,不要试图按照它来写信。

一旦您到达这一点,就该阅读"What the Hell? -- A Journey Through the Nine Circles of Python Packing"。它提供了很多实用的建议。最实用的:看看其他项目是怎么做的,然后复制粘贴……嗯……学习一下。

如果您现在还没有被吓到,我实际上可以建议您查看 Python 模块模板。我所知道的最好的之一是"Cookiecutter PyPackage"。其维护良好的文档可在here 获得。如果您了解了 Python 打包的基础知识,那么它是创建打包代码所需的所有文件和基础架构的一种快速可靠的方法。

荣誉奖:有一些工具试图简化整个过程。在我的列表中排名第一并且在 cmets 中也已经提到的是 PyInstaller (manual)。通常提到的另一个工具(用于 Windows)是 py2exe(没有可用的最新文档,AFAIK)。另一个崭露头角且有前途(但尚未准备好生产?)的工具是Briefcase (documentation)。还有更多,但他们都有自己的问题。您很有可能最终会阅读上述文献以试图理解这些问题...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多