Python 3.3中的包管理 - 最好的工具是什么?

时间:2014-02-09 12:15:10

标签: python python-2.7 python-3.x

我是Python的新手,我在一个非常小的XML解析脚本中使用它。对于各种Python版本及其包管理器,我已经变得非常困惑。

我使用的是Ubuntu 13.10,它似乎是从全新安装中预装的Python2.7和Python3.3。

在virtualenv之外,我可以从提示符访问这两个版本:

>which python
/usr/bin/python

>which python2
/usr/bin/python2

>which python3
/usr/bin/python3

前两个符号链接到相同的python2.7二进制文件,第三个符号链接到python3.3二进制文件。这一切都很有道理。

我也明白python3.3带有pyvenv,用于为python3.3创建virtualenvs

>pyvenv-3.3 mynewproject

使用bin目录和“自包含”python3.3解释器等创建一个新的虚拟环境。要使用此环境,我只需:

>source <path-to-mynewproject>/bin/activate

一切都很好,理解。有一个完美的感觉。现在虽然出现了混乱。我使用easy_install吗? PIP?的setup.py?分发?这些无数的包裹经理是什么?我从哪里得到它们?他们使用Python2.7或Python3.3吗?或两者?哪些可以在我的新virtualenv中工作?我关心的?

简而言之,鉴于我只会进行Python3.3 +开发,但也考虑到我不想破坏我的系统,这无疑需要Python2.7软件包,什么是规范(最好的,批准,支持的方式让我做包管理。

说真的,到底是什么?完全糊涂了。

感谢您提供的所有帮助。

1 个答案:

答案 0 :(得分:4)

  1. 使用virtualenvs隔离所有内容
  2. pipeasy_install都是包管理器,您可以同时使用它们但我更喜欢pip
  3. setup.py只是distutils的脚本,pipeasy_install都使用setup.py来安装软件包。
  4. 如果你在virtualenvs中运行你的python,它将阻止你卸载或更新会破坏你的系统的包。那么pip和easy_install之间的选择就不那么清楚了。理论上pip更新,但由于某些原因,他们安装软件包的方式可能适用于pip而不是easy_install。当你必须处理必须编译的本地库时会发生这些问题...很难说哪一个更好但是工作的那个应该可以解决问题,因为他们无论如何都要在同一个目录中安装包。

    除非在setup.py中无法使用pypi,否则无需安装包pip。如果您将软件包传递给它所在的目录,setup.py也会安装setup.py个软件包。

    如果你制作了一个包,请确保使用pypi可以使用distutils进行安装。然后您可以将其发布到sudo pip install .. sudo easy_install ..

    另外,正如我所知,很多教程都没有使用virtualenvs,甚至可能在他们的教程中写下如下内容:

    {{1}}

    请注意,如果您使用的是virtualenv,则永远不必使用sudo,如果您使用sudo,则可能会安装系统包,因为它不会在virtualenv中从用户运行,而是从根。

    建议阅读Lukas Grafhttp://guide.python-distribute.org/introduction.html#the-packaging-ecosystem