在 Arch 上安装 python 包的推荐方式

Nil*_*ner 49 arch-linux pacman python pip

在 Arch 上安装 python 包的推荐方法是什么?在 AUR 上搜索它们并从那里安装它们(或创建一个PKGBUILD文件来自己制作软件包)或使用pip?

我从安装 pacman 和 AUR 的东西开始,不知道与pip包混合是否明智。

les*_*ana 38

如果您不需要所有用户的 python 包,那么您可以像这样将它们安装在您的家中:

pip install --user packagename
Run Code Online (Sandbox Code Playgroud)

在您家中安装不会与包管理器冲突。

默认情况下pip install --user将安装在您的“用户站点”目录中。通常是这样的:/home/lesmana/.local/lib/python3.6/site-packages

以下命令将打印您的“用户站点”位置等:

python -m site
Run Code Online (Sandbox Code Playgroud)

自定义安装位置:

PYTHONUSERBASE=$HOME/some/dir pip install --user packagename
Run Code Online (Sandbox Code Playgroud)

这将安装下面的所有内容 $HOME/some/dir

跑步:

PYTHONUSERBASE=$HOME/some/dir $HOME/some/dir/bin/progname
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅pip 手册


如果您确实希望所有用户都使用 python 包,那么安装它的最佳位置是/opt. 例如像这样:

PYTHONUSERBASE=/opt/packagedir pip install packagename
Run Code Online (Sandbox Code Playgroud)

(注意缺失--user

并运行,如上:

PYTHONUSERBASE=/opt/packagedir /opt/packagedir/bin/progname
Run Code Online (Sandbox Code Playgroud)

背景说明:/opt通常被 gnu/linux 发行版承认为本地用户或系统管理员可以安装他自己的东西的目录。换句话说:发行版的包管理器通常不接触/opt. 这在文件系统层次结构标准中或多或少是标准化的

为了让用户感到舒适,您仍然需要编写一个包装脚本并将其放在/bin或 中/usr/bin。这仍然存在与分发包管理器冲突的风险,但至少它只是一个包装脚本文件。因此,可能造成的损害是最小的。您可以将包装脚本命名为类似local-foocustom-foo进一步降低与分发包管理器冲突的风险。

或者,您可以修改PATH以包含/opt/bin并放置您的包装器脚本。但这再次要求您修改定义的(或某些)系统文件,PATH这些文件可能再次被分发包管理器覆盖。

简而言之:如果你想为所有用户安装,那么在 /opt. 为了舒适而放置包装脚本的地方是一个判断调用。

有关/opt文件系统层次结构标准的更多信息:


Ema*_*les 20

ArchLinux 的正确方法

在 ArchLinux 中安装 PYTHON 软件包的正确方法是使用 PACMAN!要将软件包安装到 Python3,您必须使用

sudo pacman -S python-'package'
Run Code Online (Sandbox Code Playgroud)

如果你想从 Python2 安装包,你必须使用

sudo pacman -S python2-'package'
Run Code Online (Sandbox Code Playgroud)

大多数 python 软件包都在 ArchLinux 存储库中,而不在 AUR(ArchLinux 用户存储库)中的软件包 - 对于这些软件包,您必须下载 PKGBUILD 文件并进行编译。之后,您必须使用PACMAN来完成安装

makepkg -s
sudo pacman -U 'compiled-package'
Run Code Online (Sandbox Code Playgroud)

ArchLinux 的第二个正确方法

当包不在 AUR 中或 PKGBUILD 不起作用时,您可以使用 PIP 将其安装到 Python3

sudo pip install 'python-package'
Run Code Online (Sandbox Code Playgroud)

或 Python2

sudo pip2 install 'python-package'
Run Code Online (Sandbox Code Playgroud)

请注意:当您使用pip同一个安装文件夹时pacman,大多数时候,尤其是当您更新所有系统包 ( sudo pacman -Suy) 时,会引发冲突错误。您总是必须选择上面的第一个选项。要解决冲突问题,只需卸载pip软件包并在pacman( pip uninstall 'python-package')上安装它们的等效软件包。

你可以给一个机会,virtualenv甚至conda

如果你打算开发一些 python 应用程序或 python 包,你更好的选择是使用虚拟环境。

对于 Python 打包应用程序,您应该尝试poetry从头到尾管理应用程序是当前更好的选择。这是一个比requirements.txt+更好的选择setup.py

另一个更简单的选择是使用 python-virtualenv。这可以为您的代码带来可移植性并维护旧包。安装它

sudo pacman -S python-virtualenv
Run Code Online (Sandbox Code Playgroud)

试试这个

virtualenv -p /usr/bin/python3 yourenv
source yourenv/bin/activate
pip install package-name
Run Code Online (Sandbox Code Playgroud)

创建此环境时yourenv,您将设置pip为仅将软件包安装到此环境中,而不是安装到整个系统中

这些其他链接对于您想了解更多关于使用conda或 来管理 Linux 上的软件包很有用virtualenv

从 Jupyter Notebook 安装 Python 包

在 ArchLinux 上编写 Python

如果你遵循这些规则,你的 ArchLinux 就不会崩溃,也不会有 PACMAN 和 PIP 之间的依赖问题。

希望有用!


Fal*_*mot 9

通常,在发行版中,建议您使用发行版的包管理器。您当然可以使用 pip(或者,在 perl 世界中,cpan)安装东西,或者自己编译和安装东西。但是,当您这样做时,发行版的包管理器不知道它们,也无法管理它们的依赖项或更新。

使用 pip 几乎等同于编译和安装您自己的包。如果需要,请执行此操作,但更喜欢发行版的包管理器。

  • 你应该绝对避免使用`pip`(至少通过`sudo`全局或以root身份使用) - 当`pacman`尝试安装一些依赖项时,我刚刚收到了相当多的`site-package / ...`已经存在的错误 (3认同)

小智 6

对于某些包(我很可能不想破解的包),我使用以下方法制作自己的包:

https://github.com/bluepeppers/pip2arch

然后构建并安装生成的 PKGBUILD。

我将 virtualenvs 留给我可能想要修改或破解的包。