安装Python软件包的最佳方法是什么?


41

在Ubuntu 11中安装Python软件包的最佳方法是什么?我最近是一名Ubuntu信徒,想学习最佳实践。

对于上下文,我希望安装tweeststream软件包,但在Synaptic软件包管理器中没有看到它。另外,我对编程非常陌生,但通常可以跟代码示例一起学习。


Answers:


30

我认为对您来说最好的方法是安装Python打包系统,例如“ python-pip”。您可以使用Synaptic或Ubuntu软件中心进行安装。

Pip使您可以轻松地轻松安装和卸载Python软件包pip install package。在您的情况下,从终端将是这样的:

sudo pip install tweeststream

3
这对于简单的程序包是好的,但对于较大的程序包则不是很好,例如numpy
hayd

@hayd:为什么?这与askubuntu.com/questions/595366/…
naught101

2
@ naught101我想我可能是说scipy,不确定是否相关...看起来pip在python路径中为时已晚。我强烈建议您使用anaconda / conda,它远远优于pip IMO。
海德2015年

2
恕我直言,使用sudo pip <anything>时应非常小心。由于tweetstream不在Ubuntu软件中心内,因此我建议使用virtualenvtweetstream的setup.py需要anyjson一个Ubuntu的软件包。不在中安装tweetstream virtualenv可能导致其他依赖的Ubuntu应用程序anyjson失败。硬排除故障。
Mark Mikofski 2015年

9
重复一遍:不要sudo pip在Ubuntu上使用。@MarkMikofski:您不需要virtualenv(除非出于某些特定原因而需要它)。python -mpip install --user package-name可以packafe-name为当前用户安装该软件包。如果存在复杂的(大的C扩展名)依赖关系;您可以使用apt-get来安装它们,除非必要,否则避免安装构建依赖项。
jfs

37

更新日期:2019-05-11:这篇文章主要提到了virtualenv,但是根据有关模块安装Python文档,由于Python 3.5“ venv现在建议使用来创建虚拟环境”,而virtualenv对于3.4之前的Python版本则是一种替代方法。

更新日期:2018-08-17:由于conda -4.4.0在所有平台上都可以conda用于activateanaconda

更新日期:2017-03-27:PEP 513- manylinuxPyPI的二进制文件

更新时间:2016-08-19:Continuum Anaconda选项

这有点类似于easy_install / pip或apt-get

对于全局 Python软件包,请使用Ubuntu软件中心,apt,apt-get或synaptic

Ubuntu将Python用于许多重要功能,因此干扰Python可能会破坏您的OS。这是最主要的原因,我从来没有使用pip我的Ubuntu系统上,而是我请使用Ubuntu软件中心,突触apt-get或较新的刚apt,所有默认情况下从安装软件包Ubuntu的仓库。这些软件包已经过测试,通常是经过预编译的,因此它们安装速度更快,并最终为Ubuntu设计。此外,还将安装所有必需的依赖项,并维护安装日志,以便可以回滚它们。我认为大多数软件包都有相应的Launchpad仓库,因此您可以提出问题。

使用这两个Ubuntu软件包的另一个原因是,有时这些Python软件包根据您从何处下载而具有不同的名称。Python-chardet是一个包的示例,该包曾在PyPI上被命名为一件事,而在Ubuntu存储库中被命名为另一件事。因此,执行类似操作pip install requests将不会意识到chardet已安装在您的系统中,因为Ubuntu版本具有不同的名称,因此安装了一个新版本,它将以很小的微不足道的方式破坏您的系统,但您为什么仍会这样做。

通常,您只想将可信代码安装到操作系统中。所以您应该对打字感到紧张$ sudo pip <anything-could-be-very-bad>

最后,使用这两个Ubuntu软件包都更容易安装某些东西。例如,如果您尝试pip install numpy安装numpy和scipy,除非您已经安装了gfortran,atlas-dev,blas-dev和lapack-dev,否则将看到无休止的编译错误。但是,通过Ubuntu存储库安装numpy和scipy就像...

$ sudo apt-get install python-numpy python-scipy

真幸运,因为您使用的是Ubuntu,它是现有的获得最广泛支持且经常更新的发行版之一。您所需的每个Python软件包很可能都在Ubuntu存储库中,并且可能已经安装在您的计算机上。每6个月,将发布一个新的软件包周期,其中包含最新版本的Ubuntu。

如果您100%确信该软件包不会以任何方式干扰您的Ubuntu系统,那么您可以使用pip进行安装,并且Ubuntu很好,可以通过将发行版软件包放在一个名为的文件夹中来将这些发行版软件包与发行版软件包分开dist-packages/。Ubuntu存储库同时具有pip,virtualenv和setuptools。但是,我支持Wojciech关于使用virtualenv的建议。

对于个人 Python项目,请使用pip和wheel in virtualenv

如果您需要最新版本,或者该模块不在Ubuntu存储库中,请启动virtualenv并使用pip安装该软件包。尽管pip和setuptools已合并,但IMO pip比易安装或distutils更受青睐,因为它会一直等到软件包完全下载并生成后,再将其复制到文件系统中,从而使升级或卸载变得轻而易举。在很多方面,它与apt-get相似,因为它通常可以很好地处理依赖关系。然而,你 可以亲自处理一些依赖,但由于PEP 513获得通过,现在有manylinux在Python包索引(PyPI中)流行的Linux发行版如Ubuntu和Fedora的二进制文件例如,如上文针对NumPy和SciPy所述,请确保已从Ubuntu存储库中安装了gfortran,atlas-dev,blas-dev和lapack-dev。例如,默认情况下NumPySciPy默认使用OpenBLAS 作为manylinux轮子分发给Ubuntu 的ATLAS。您仍然可以使用pip选项来从源代码构建它们。--no-use-wheel--no-binary <format control>

~$ sudo apt-get install gfortran libblas-dev liblapack-dev libatlas-dev python-virtualenv
~$ mkdir ~/.venvs
~$ virtualenv ~/.venvs/my_py_proj
~$ source ~/.venvs/my_py_proj/bin/activate
~(my_py_proj)$ pip install --no-use-wheel numpy scipy

有关使用pip 的安装方案,sudoers将pip,setuptools,virtualenv或wheel的更新版本安装到您​​的个人资料中,请参阅下面的“您不在”下一节--user。正如JF Sebastian在他对另一个答案的评论中指出的那样,您可以使用它来更新点子以供个人使用。注意:-m实际上只有在MS Windows上更新pip时才需要

python -m pip install --user pip setuptools wheel virtualenv

较新版本的pip会自动缓存滚轮,因此以下内容仅对较旧版本的pip有用。由于您可能会多次安装这些工具,因此请考虑使用带有pip的wheel创建驾驶室。自v13.0.0起,Wheel已包含在virtualenv其中,因此,如果您的版本virtualenv太旧,则可能需要先安装Wheel。

~(my_py_proj)$ pip install wheel  # only for virtualenv < v13.0.0
~(my_py_proj)$ pip wheel --no-use-wheel numpy scipy

这将在中创建二进制滚轮文件<cwd>/wheelhouse,用于-d指定其他目录。现在,如果您启动另一个virtualenv,并且需要已经构建的相同软件包,则可以使用以下方法将其安装在驾驶室中:pip install --find-links=<fullpath>/wheelhouse

阅读Python文档中的安装Python模块Python软件包索引主页上的安装软件包。还有pipvenvvirtualenvwheel

如果您不在sudoers并且virtualenv未安装。

使用虚拟环境的另一种选择,或者如果您使用的是没有root特权的Linux共享,则将--user--home=<wherever-you-want>Python安装方案与Python一起使用distutils会将软件包安装为所需的值site.USERBASE或任意位置。较新版本的pip也可以--user选择。不要使用sudo

pip install --user virtualenv

如果您的Linux版本的pip太旧,则可以传递设置选项,通过--install-option该选项可以将自定义选项传递给setup.py构建扩展的某些软件包的某些脚本,例如PREFIX。您可能只需要提取发行版,然后使用distutils老式方法通过键入来安装软件包python setup install [options]。阅读一些安装文档distutils文档可能会有所帮助。

Python足以将site.USERBASEPYTHONPATH的内容添加到其他内容中,因此更改只会对您有所影响。的热门位置--home~/.local。有关确切的文件结构以及站点包的具体位置,请参见Python 模块安装指南注意:如果使用--home安装方案,则可能需要将其添加到PYTHONPATH环境变量中export,在中.bashrc.bash_profile或在外壳中使用,以便在Python中可以使用本地化的软件包。

Continuum Anaconda Python用于数学,科学,数据或个人项目

如果将Python用于数学,科学或数据,则IMO的一个不错的选择是Anaconda-Python 发行版Anaconda,Inc.发布的更基本的miniconda发行版(以前称为Continuum Analytics。尽管任何人都可以将Anaconda用于个人项目,但默认安装包括500多种数学和科学软件包,例如NumPy,SciPy,Pandas和Matplotlib,而miniconda仅安装Anaconda-Python和conda环境管理器。Anaconda仅安装到您的个人资料中,即: /home/<user>/更改您的~/.bashrc~/.bash_profile在Anaconda的路径之前添加您的个人$PATH 推荐资源conda.sh在你的~/.bashrc,它可以让你使用conda activate <env|default is base>启动蟒蛇 - 这只会影响 -你的系统路径是不变的。因此你就不会需要root访问或sudo使用蟒蛇!如果您已经将Anaconda-Python,miniconda或conda添加到您的个人路径中,那么您应该PATH从中删除导出~/.bashrc,并更新为新的推荐,这样您的系统Python将再次成为第一名。

这与--user我在上一节中介绍的选项有些相似,不同之处在于它适用于整个Python,而不仅仅是软件包。因此,Anaconda 与您的系统Python完全分开,它不会干扰您的系统Python,只有您可以使用或更改它。由于它安装了新版本的Python及其所有库,因此您至少需要200MB的空间,但是缓存和管理库非常聪明,这对于使用Anaconda可以完成的一些很棒的事情很重要。

Anaconda负责管理在线存储库(以前称为binstar)中的依赖项所需的Python二进制文件和库的集合,它们还将用户程序包托管为不同的“通道”。conda默认情况下,Anaconda使用的程序包管理器会从Anaconda安装程序包,但是您可以使用该-c选项发出不同的“渠道”信号。

安装软件包,conda如下所示pip

$ conda install -c pvlib pvlib  # install pvlib pkg from pvlib channel

但是conda可以做的更多!它也可以像一样创建和管理虚拟环境virtualenv。因此,由于Anaconda创建了虚拟环境,因此pip可以使用程序包管理器将PyPI中的程序包安装到没有root或的Anaconda环境中sudo。千万不能使用sudo与蟒蛇!警告!但是,在混合pipconda在Anaconda环境中进行操作时要小心,b / c您将不得不更仔细地管理软件包依赖项。pip在conda环境中的另一种选择是使用conda-forge频道,但最好在以conda-forge为默认频道的全新conda环境中进行。最后,如果您只能在PyPI上找不到软件包,请考虑使用,--no-deps然后使用手动安装其余的依赖项conda

如果您熟悉Anaconda,它在某些方面也与Ruby RVM类似。Anaconda conda还允许您使用不同版本的Python创建虚拟环境。例如conda create -n py35sci python==3.5.2 numpy scipy matplotlib pandas statsmodels seaborn将在称为的新环境中使用Python-3.5创建科学/数据科学堆栈py35sci。您可以使用切换环境conda。由于康达-4.4.0,现在这是不同的,以virtualenv它的用途source venv/bin/activate,但之前的畅达-4.4.0conda命令是在相同virtualenv,也使用source

# AFTER conda-4.4 
~/Projects/myproj $ conda activate py35sci

# BEFORE conda-4.4 
~/Projects/myproj $ source activate py35sci

但是,等等!Anaconda也可以从Anaconda 频道安装不同的语言,例如R进行统计编程。您甚至可以设置自己的频道来上传为conda构建的软件包分发。如前所述,conda- forge在conda-forge Anaconda频道上维护了PyPI上许多软件包的自动构建。r

结语

根据您的个人需求和访问权限,有许多选项可用于在Linux上维护Python项目。但是,如果有任何事情我希望您从这个答案中脱颖而出,那就是您几乎永远不需要使用sudoPython安装软件包。使用sudo可能会使您到有些不对劲。你被警告了。

祝您好运,编码愉快!


我希望我读这之前,我毁了我的系统的Python发行由sudo荷兰国际集团与周围pip。伟大的文章,感谢您提供的信息。
slhck

pip install numpy应该安装所有依赖项
Timo

正如我在2017-03-27更新中提到的@Timo,因为PEP 513是由许多Linux numpy二进制文件实现的,PyPI可用 OpenPLAS构建,:它们具有必需的依赖性。但是,通常,pip install <package>将仅安装的install_requires部分中列出的Python软件包依赖项setup.py。例如:安装Jupyter将不会安装哈斯克尔库pandoc到Jupyter笔记本电脑出口乳胶,等等
马克Mikofski

相反,conda install <package>可能会安装所有依赖项,包括C / C ++,FORTRAN等,甚至包括Haskell库,因为conda不仅管理pip之类的Python包,而且还管理环境。因此,如果您有Anaconda或miniconda,则将conda install Jupyter所有内容安装在配方meta.yml文件中,包括pandoc Haskell库。有关更多信息,请参见PyPA
Mark Mikofski

10

除了Novarchibald的附加功能外,通常还可以为python项目创建虚拟环境并在其中安装依赖项。这使您可以更好地控制依赖项及其版本。要设置虚拟环境,请输入:

virtualenv --no-site-packages --distribute my_python_project

然后,使用以下命令激活它:

cd my_python_project
source bin/activate

此时,您通过pip安装的所有内容都将保留在此虚拟环境中。如果要全局安装某些软件,则应首先使用以下命令退出virtualenv:

deactivate

您可以在此处找到有关virtualenv的更多信息。


1
或者:使用virtualenv bin目录(此处为my_python_project / bin / pip)中的pip,您可以维护该环境,而无需“激活”它。然后-使用安装在垃圾箱中的任何脚本都使用给定的virutalenv。“ activate”仅在使用virtualenv特定bin进行“ python”,“ easy_install”和“ pip”调用时非常方便。
2013年

Python的安装文档说使用“ pyvenv”来创建特定于项目的虚拟环境。但是virtualenv是使用较旧python版本docs.python.org/3/installing/index.html?highlight=pip的项目的后备
pbhj

2
请注意,virtualenv选项--no-site-packages--distribute现在已弃用,不再起作用。
牧草

4

除了Zetah'a答案之外,从终端安装python-pip的命令是:

sudo apt-get install python-pip

1

试试这个 使用PyQt4开发的用于PIP的GUI框架

使用PyQt4开发的用于PIP的GUI框架

开始画面

在此处输入图片说明

开始屏幕包含用于用户选择他想要执行的过程的选项。

还可以指定他要对其执行操作的python版本。

文件菜单具有“退出”(快捷键:Ctrl + Q)和“刷新列表”选项,用于刷新包含程序包数据的资源文件。

安装画面

在此处输入图片说明

安装屏幕上有一个搜索栏,用户可以使用它搜索和安装所需的软件包。

更新画面

在此处输入图片说明

更新屏幕将显示已过期且可以升级的软件包列表。

卸载提示

在此处输入图片说明

卸载屏幕显示了用户系统中已安装并且可以卸载的软件包列表。

进度窗口

在此处输入图片说明

进度窗口是PIP-GUI的内置终端小部件,可显示执行操作时正在运行的进程。


1
欢迎来到Ask Ubuntu!虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
Kevin Bowen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.