在 Arch 上安装 python 包的推荐方法是什么?在 AUR 上搜索它们并从那里安装它们(或创建一个PKGBUILD
文件来自己制作包)或使用pip
?
pip
我首先安装了 pacman 和 AUR 的东西,不知道与软件包混合是否明智。
答案1
如果您不需要所有用户的 python 软件包,那么您可以将它们安装在您的家中,如下所示:
pip install --user packagename
在你家里安装不会与包管理器冲突。
默认情况下pip install --user
将安装在您的“用户站点”目录中。通常是这样的/home/lesmana/.local/lib/python3.6/site-packages
:
以下命令将打印您的“用户站点”位置等信息:
python -m site
自定义安装位置:
PYTHONUSERBASE=$HOME/some/dir pip install --user packagename
这将安装下面的所有内容$HOME/some/dir
跑步:
PYTHONUSERBASE=$HOME/some/dir $HOME/some/dir/bin/progname
看点手册了解更多信息。
如果您确实想要为所有用户提供 python 包,那么最好的安装位置是/opt
.例如这样:
PYTHONUSERBASE=/opt/packagedir pip install packagename
(注意缺失的--user
)
并运行,如上所述:
PYTHONUSERBASE=/opt/packagedir /opt/packagedir/bin/progname
背景说明:/opt
被 gnu/linux 发行版普遍认为是本地用户或系统管理员可以安装自己的东西的目录。换句话说:发行版的包管理器通常不接触/opt
.这或多或少是标准化的文件系统层次结构标准
为了让用户感到舒适,您仍然需要编写一个包装脚本并将其放置在/bin
或中/usr/bin
。这仍然存在与分发包管理器发生冲突的风险,但至少它只是一个包装脚本文件。因此,可能造成的损害是最小的。您可以将包装器脚本命名为类似local-foo
或 的名称custom-foo
,以进一步最小化与分发包管理器发生冲突的风险。
或者,您可以修改PATH
以包含/opt/bin
并将包装器脚本放置在那里。但这再次要求您修改PATH
定义的(或某些)系统文件,这些文件可能再次被分发包管理器覆盖。
简而言之:如果您想为所有用户安装,请在/opt
.为了方便起见,将包装脚本放置在何处需要进行判断。
/opt
有关文件系统层次结构标准的更多信息:
答案2
ArchLinux 的正确之路
在 ArchLinux 中安装 PYTHON 包的正确方法是使用 PACMAN!要将软件包安装到 Python3,您必须使用
sudo pacman -S python-'package'
如果你想从Python2安装包,你必须使用
sudo pacman -S python2-'package'
大多数 python 软件包都在 ArchLinux 存储库中,而有些软件包不在 AUR(ArchLinux 用户存储库)中 - 对于这些软件包,您必须下载 PKGBUILD 文件并编译。之后,你必须使用PACMAN来完成安装
makepkg -s
sudo pacman -U 'compiled-package'
ArchLinux的第二条正确之路
当包不在 AUR 中或 PKGBUILD 无法工作时,您可以使用 PIP 将其安装到 Python3
sudo pip install 'python-package'
或Python2
sudo pip2 install 'python-package'
意识到:当您使用pip
共享的相同安装文件夹时pacman
,尤其是当您更新所有系统软件包时(sudo pacman -Suy
),会引发冲突错误。您始终必须选择上面的第一个选项。要解决冲突问题,只需卸载软件包并在( )pip
上安装它们的等效软件包。pacman
pip uninstall 'python-package'
你可以给一个机会,virtualenv
甚至conda
如果您计划开发一些 python 应用程序或 python 包,更好的选择是使用虚拟环境。
对于 python 打包应用程序,你应该尝试poetry
这是当前从头到尾管理应用程序的更好选择。这是一个比requirements.txt
+更好的选择setup.py
。
另一个更简单的选项是 use python-virtualenv
。这可以为您的代码带来可移植性并维护旧的包。安装它
sudo pacman -S python-virtualenv
并尝试这个
virtualenv -p /usr/bin/python3 yourenv
source yourenv/bin/activate
pip install package-name
创建此环境时yourenv
,您将设置pip
仅将软件包安装到此环境中,不针对整个系统。
如果您想了解有关使用conda
或在 Linux 上管理软件包的更多信息,这些其他链接可能会很有用virtualenv
:
从 Jupyter Notebook 安装 Python 包
如果您遵循这些规则,您的 ArchLinux 将不会崩溃,并且 PACMAN 和 PIP 之间不会出现依赖性问题。
希望它有用!
答案3
2021 年当前实践更新:
如果您尝试将软件作为发行版的一部分发布,请使用发行版的包管理器。如果您正在做其他任何事情,答案很可能是使用 venv (请参阅https://docs.python.org/3/tutorial/venv.html)。
这将帮助您解决您的发行版附带旧软件包或某些软件包依赖于旧版本软件包的情况,并帮助您避免系统升级和 python 版本之间不兼容的影响。
避免在 venv 之外使用 pip,尤其避免使用 pip 作为 root。这只会破坏系统包并破坏一些东西。具有系统范围的包管理器的语言与封装包依赖管理的发行版需要之间的尴尬在实践中相互作用很差,但 venv 可以让您避免这种情况。
2013年的回答:
通常,在发行版中,建议您使用发行版的包管理器。您当然可以使用 pip (或者在 perl 世界中,cpan)安装东西,或者自己编译和安装东西。但是,当您执行此操作时,发行版的包管理器不知道它们,也无法管理它们的依赖项或更新。
使用 pip 几乎相当于编译和安装您自己的包。如果需要,可以这样做,但更喜欢发行版的包管理器。
答案4
除了此处的其他答案之外,请查看该python-virtualenv
包。如果您正在对具有不同依赖项且版本号不匹配的多个项目进行开发,这可能会非常有用。
https://wiki.archlinux.org/index.php/Python_VirtualEnv
另请注意,pip 和 virtualenv 有两种变体。一种适用于 Python 2,一种适用于 Python 3。如果安装因语法错误而失败,则您可能尝试使用错误的版本。