我是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软件包,什么是规范(最好的,批准,支持的方式让我做包管理。
说真的,到底是什么?完全糊涂了。
感谢您提供的所有帮助。
答案 0 :(得分:4)
pip
和easy_install
都是包管理器,您可以同时使用它们但我更喜欢pip setup.py
只是distutils的脚本,pip
和easy_install
都使用setup.py
来安装软件包。如果你在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 Graf:http://guide.python-distribute.org/introduction.html#the-packaging-ecosystem