【问题标题】:Best way to install python packages locally for development在本地安装 python 包以进行开发的最佳方法
【发布时间】:2010-07-19 13:33:29
【问题描述】:

作为 python 游戏的新手,我似乎错过了一些关于如何在程序上进行开发但又将其保留在实际环境中的知识。

gpodder 之类的程序可以直接从源代码签出中运行,这非常方便,但其他程序希望“安装”后运行。

许多程序都与 setup.py 一起分发,其中包含以 root 身份运行“python ./setup.py install”的指令,这会将东西放在文件系统中的某个位置。甚至还有像“develop”这样的安装命令,似乎可以满足我的要求。所以我尝试了:

export PYTHONPATH=/home/alex/python
python ./setup.py develop --install-dir=/home/alex/python

它在本地下载了一堆东西,似乎神奇地确保了我正在破解的应用程序仍然在 src 树之外运行。所以我想我的迂回问题是这是开发python代码的正确方法吗?像 easy_install 和 pip 这样的东西是如何影响到这个的?

所以我尝试了以下方法:

 python /usr/share/pyshared/virtualenv.py /home/alex/src/goobook
 cd /home/alex/src/goobook/googbook.git
 /home/alex/src/goobook/bin/python ./setup.py develop

最后把有问题的程序链接到我的~/bin

 cd /home/alex/src/goobook
 linkbin.pl bin/goobook

但是调用会引发大量额外的喋喋不休,这似乎暗示它是错误的:

17:17 alex@socrates/i686 [goobook] >goobook --help /home/alex/bin/goobook:5: UserWarning: Module pkg_resources was already imported from /home/alex/src/goobook/lib/python2.5/site-packages/setuptools-0.6c8-py2.5.egg/pkg_resources.py, but /home/alex/src/goobook/lib/python2.5/site-packages/distribute-0.6.10-py2.5.egg is being added to sys.path from pkg_resources import load_entry_point /home/alex/bin/goobook:5: UserWarning: Module site was already imported from /home/alex/src/goobook/lib/python2.5/site.pyc, but /home/alex/src/goobook/lib/python2.5/site-packages/distribute-0.6.10-py2.5.egg is being added to sys.path from pkg_resources import load_entry_point

【问题讨论】:

  • 这些是警告,而不是错误。最有可能的事情会正常工作。有趣的是,您的 virtualenv 中同时安装了 setuptools 分发(这就是导致警告的原因);分发是 setuptools 的替代品。
  • 啊,这可能是包的一个功能,如果玩的话。它似乎下载分发作为设置的一部分。它应该只做其中一个吗? gitorious.org/goobook/mainline/blobs/master/setup.py
  • 看来问题已经随着 Debian Squeeze 的更新而消失了。

标签: python installation


【解决方案1】:

安装:

http://pypi.python.org/pypi/virtualenv

为您的库设置本地化虚拟环境,并且:

http://pypi.python.org/pypi/setuptools

即“easy_install”来安装新的东西。

【讨论】:

  • 它几乎成功了,看到我遇到的问题的问题。
  • @stsquad:我认为在设置 virtualenv 以及使用 virtualenv 安装的东西时使用什么 python 很重要。它出现在您可能使用过的 2 个不同版本的上方。另外,设置你的PYTHONPATH 指向新的东西而不是旧的东西,然后重新加载你的shell。我猜它可能与以前的安装冲突...
  • virtualenv 在 vi​​rtualenv 中安装 setuptools(或分发,这是它的新替代品);您不需要在第二步中明确安装 setuptools。如果你这样做了,那可能就是导致你看到这些 UserWarnings 的原因。
  • 2014 年更新:distribute 现在是弃用/过时的分支,setuptools 又是新的 setuptools。它仍然会自动附带virtualenv——就像pip一样,这是你应该使用的,而不是easy_install。同时,Python 3.3 自带venv,类似virtualenv 的解决方案,而在Python 3.4 中,venv 会自动安装pip。所以,除了read the venv docs,别无他法。
【解决方案2】:

Virtualenv 允许您在完全独立和隔离的 Python 环境中工作。它将让您轻松创建多个环境,这些环境安装了不同的 Python 包或同一包的不同版本。 Virtualenv 还可以让您在不同的环境之间轻松切换。

截至 2012 年,Python 中事实上首选的包管理工具是 pip,而不是 setuptools。 Pip 能够处理依赖关系并在全局或虚拟环境中安装/卸载。 Pip 甚至与 virtualenv 一起开箱即用。

Python 3

另外值得一提的是,虚拟环境正在成为release 3.3 中 Python 本身的一部分,并实现了PEP 405

【讨论】:

    【解决方案3】:

    Python Packaging User Guide,“旨在成为有关如何使用当前工具打包、发布和安装 Python 发行版的权威资源”,建议使用 pip 在“开发模式”下安装:

    pip install -e <path>
    

    因此在你的包的根目录中你可以简单地

    pip install -e .
    

    installing from a local source tree

    【讨论】:

      【解决方案4】:

      使用依赖项开发 Python 应用程序的最佳方法是:

      1. 下载所需版本的python解释器。

      2. 安装和使用 buildout (http://www.buildout.org/)。

      Buildout 类似于 Maven for Java(将自动获取所有需要的包)。

      这样您的 Python 解释器就不会被第三方包污染(如果您将在其他机器上运行开发的应用程序,这一点很重要)。此外,您可以将 buildout 与 virtualenv 包集成(这允许您为每个项目创建虚拟 python 解释器)。

      【讨论】:

        猜你喜欢
        • 2010-10-17
        • 1970-01-01
        • 2011-10-18
        • 1970-01-01
        • 2014-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多