【问题标题】:How to create, share and run python programs with pip and virtualenv如何使用 pip 和 virtualenv 创建、共享和运行 python 程序
【发布时间】:2013-12-20 17:32:13
【问题描述】:

我使用虚拟环境创建了我的程序。它在我的项目文件夹中工作正常。现在我需要把这个程序发布到每个人都可以访问的生产环境中。所以这个程序应该可以按原样运行,或者它可能作为一个步骤被合并到其他程序中。我应该如何部署它?压缩整个项目文件夹?是否可以不要求客户复制它然后解压缩并运行?或者唯一的方法是创建一个常用的脚本,自动解压缩东西并配置虚拟环境,然后运行它,还是有更聪明的方法?

更复杂的场景是它应该用作库时。如何部署它以便其他人可以将其指定为他们的依赖项并选择它?似乎唯一的方法是创建自己的类似 PyPi 的本地存储库 - 对吗?

谢谢!

【问题讨论】:

    标签: python deployment virtualenv pip dependency-management


    【解决方案1】:

    这就是我发现的:

    如果我们有一个项目 A 作为 API:

    1. 创建一个用于存放车轮的文件夹 (~/wheelhouse)

    2. 使用 pip config 将此文件夹指定为一个以在 http://www.pip-installer.org/en/latest/configuration.html 中查找链接

    我有:

    [global]
    
    [install]
    no-index = yes
    find-links = /home/users/me/wheelhouse
    

    确保安装了 wheel 包。

    1. 在您的项目中创建 setup.py 文件,该文件将允许创建和执行轮子

      python setup.py bdist_wheel

    将生成的车轮复制到驾驶室,使其具有:

    ~/wheelhouse/projectA-0.1-py33-none-any.whl
    

    现在我们要创建一个使用 projectA API 的项目 - 项目 B

    我们正在为这个项目创建一个单独的文件夹,然后为它创建一个虚拟环境。

    mkdir projectB; cd projectB
    virtualenv projectB_env
    source projectB_env/bin/activate
    pip install projectA
    

    现在,如果您在此文件夹中运行 python 控制台,您将能够从 projectA 导入类!一个问题解决了!

    现在你已经完成了 projectB 的开发,你需要运行它。 为此,我建议使用 Pex (twitter.common.python) 库。 Pex 现在支持 (v0.5.1) 车轮查找作为依赖项。我正在向它提供 requirements.txt 文件的内容以解决依赖关系。因此,您将获得可执行的轻量级归档 virtualenv,其中包含项目运行所需的一切。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 谢谢,但guide.python-distribute.org/future.html#inshort setup.py 不见了! distutils 不见了!分配不见了! pip 和 virtualenv 留在这里!鸡蛋……不见了!
      • 抱歉,我以为您问的是如何现在分发您的程序,而不是在某个不可预测的未来。祝你好运。
      • 我试图了解 pip 和 virtualenv 应该如何帮助我进行分发和部署(如果可以的话)。我知道如何创建鸡蛋文件,但这不是我要问的。据我了解,虚拟环境背后的想法是能够创建、维护和分发程序以及可以在任何地方轻松重建的环境。否则,将它在一个环境中开发,然后将其部署到完全不同的环境中,你不能保证它会工作似乎是没有意义的。
      • virtualenv 背后的想法首先是主要是拥有一个独立的 Python 环境。然后使用 pip 和 Distribute/setuptools 你确实可以重新创建相同的环境,但是到目前为止还没有自动创建 venv 本身(也没有所需的 Python 版本)。 pip 本身依赖于分发/设置工具来安装软件包 FWIW。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 2019-11-01
      • 1970-01-01
      • 2011-06-22
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多