我目前正在用Python编写一个命令行应用程序,它需要以便于下载和运行的方式提供给最终用户。对于那些在Windows上可能没有安装Python(2.7)的用户,我打算使用PyInstaller来生成一个自包含的Windows可执行文件。用户将可以简单地下载“myapp.exe“然后运行myapp.exe [ARGUMENTS]
。在
我还想为已经安装了Python的用户(在各种平台上)提供一个(较小的)下载。一种选择是将所有代码放入一个.py文件中,“我的app.py“(以#! /usr/bin/env python
开头),并使其可用。这可以下载,然后使用myapp.py [ARGUMENTS]
或python myapp.py [ARGUMENTS]
运行。但是,将我的应用程序限制在一个.py文件中有几个缺点,包括限制了我组织代码的能力,以及使使用第三方依赖关系变得困难。在
相反,我希望分发我自己代码的几个文件的内容,以及一些(纯Python)依赖项。是否有任何工具可以将所有这些打包到一个文件中,并使用现有的Python安装轻松地下载和运行这些文件?在
编辑:请注意,我需要这些应用程序便于最终用户运行。它们不太可能安装pip
,也不可能安装Python内核之外的任何其他东西。使用PyInstaller,我可以生成一个文件,这些用户可以从web上下载并使用一个命令运行(或者,如果没有参数,只需双击)。有没有一种方法可以在不使用PyInstaller的情况下实现这种易用性(即不冗余地绑定Python运行时)?在
您可以按照评论中的建议使用pip。您需要在项目中创建一个
MANIFEST.in
和setup.py
以使其可安装。您还可以添加模块作为先决条件。更多信息可以在这个问题中找到(不是针对Django):How do I package a python application to make it pip-installable?
这将使您的模块在Python中可用。然后,您可以让用户通过}(例如,对于别名)来运行模块。在
python path/run.py
、./path/run.py
(具有+x
权限)或{您甚至可以让用户从git公共存储库安装,如下所示
……在这种情况下,他们也需要git。在
我不喜欢单一文件的想法,因为它会成为维护的负担。我会探索一种类似下面的方法。在
我非常喜欢Python的虚拟环境,因为它允许您将应用程序依赖性从操作系统的安装中分离出来。设想一个场景,您当前要分发的应用程序使用Python包
requests v1.0
。稍后,您将创建另一个要分发的应用程序,它使用requests v2.3
。如果要同时安装这两个应用程序,则可能会导致版本冲突。虚拟环境解决了这个问题,因为每个应用程序都有自己的包位置。在创建虚拟环境很容易。{{cd3}只需安装一次。现在,您的应用程序有了一个独立的python环境。另外,虚拟环境很容易清理,只要删除
env
目录,就可以完成了。在您需要一个
setup.py
文件来将应用程序安装到环境中。假设您的应用程序使用requests v2.3.0
,您的自定义代码在一个名为acme
的包中,您的脚本名为phone_home
。目录结构如下所示:
^{pr2}$setup.py
将如下所示:现在,您可以将项目制作成tarball,并按您的意愿托管它(您自己的web服务器,S3等):
最后,您可以使用
pip
将包安装到您创建的虚拟环境中:然后,您可以使用以下命令运行
phone_home
:或者在/usr/local/bin中创建一个符号链接,只需使用
phone_home
调用脚本:上面的所有步骤都可以放在一个shell脚本中,这将使该过程成为一个命令安装。在
这种方法只需稍加修改就可以很好地用于开发环境;即使用pip安装/引用您的开发目录:
pip install -e .
,其中.
指的是当前目录,您应该在项目目录中与setup.py
并排。在希望这有帮助!在
相关问题 更多 >
编程相关推荐