当 apt 没有对应的软件包时,在 Debian/Devuan 上安装 Python 软件包

ein*_*lum 7 debian python package-management pip devuan

我想在 Devuan(或 Debian)系统上安装一些pandasql系统范围内的 Python 软件包。它在 Python 包索引中,但是 - 似乎没有它的 (dpkg) 包;让我们假设实际上不存在。

\n

现在,如果我尝试这样做pip install pandasql,我会收到一条消息,建议我使用虚拟环境:

\n
\xc3\x97 This environment is externally managed\n\xe2\x95\xb0\xe2\x94\x80> To install Python packages system-wide, try apt install\n    python3-xyz, where xyz is the package you are trying to\n    install.\n    \n    If you wish to install a non-Debian-packaged Python package,\n    create a virtual environment using python3 -m venv path/to/venv.\n    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make\n    sure you have python3-full installed.\n    \n    If you wish to install a non-Debian packaged Python application,\n    it may be easiest to use pipx install xyz, which will manage a\n    virtual environment for you. Make sure you have pipx installed.\n    \n    See /usr/share/doc/python3.11/README.venv for more information.\n
Run Code Online (Sandbox Code Playgroud)\n

...但是虚拟环境不是我想要做的:我想在foo系统范围内安装。我怎样才能做到这一点?

\n

注意事项:

\n
    \n
  • 如果可能的话,请更笼统地回答,而不仅仅是关于pandasql。
  • \n
  • Devuan Excalibur (~= Debian Trixie)、Python 3.11.6、x86_64 机器
  • \n
\n

Mar*_*ler 13

Debian 不允许你这样做的事实确实来自某个地方:pip系统范围的安装按照设计与系统管理的 python 安装不兼容。Pip 本身已经认识到,当它将--system安装从“默认”降级为“用户需要指定它并希望知道他们在做什么”时。Debian 清楚地知道您会以这种方式破坏事物,因此它没有提供pip允许您这样做的软件。

关于为什么 Debian 阻止你这样做的理论(更多背景知识)就讲到这里了。

现在进行练习:

我能做些什么?

因此,您需要做的事情pip install --system pandasql是,但要以 Debian 兼容的、安全的方式进行,这样在更新任何依赖项时也不会破坏所有内容。这包括从 pip 包推断依赖项的 Debian 包名称,并确保在依赖项发生变化时,您不会留下功能失调的包。

毫不奇怪,Debian 安装软件的方式是 Debian 软件包。它们可以更新,它们有一个依赖项列表,dpkg确保它们不会覆盖彼此的文件,它们可以被干净地卸载。总而言之,从整个系统的角度来看,它们比pip包更好。你想要那个!

有一个小帮助程序可以为您完成这项艰苦的工作;sudo apt install pypi2deb; 使用起来并不难:

mkdir package_pandasql
cd package_pandasql
# Try an initial build
py2dsp --build pandasql
Run Code Online (Sandbox Code Playgroud)

如果最后一步失败并显示error: Unmet build dependencies,这将告诉您需要安装什么才能继续。就我而言:

sudo apt install python3-all python3-numpy python3-pandas python3-setuptools python3-sqlalchemy
Run Code Online (Sandbox Code Playgroud)

让安装运行并再次尝试

py2dsp --build pandasql
Run Code Online (Sandbox Code Playgroud)

成功了!

现在您在 中有一个可安装的包package_pandasql/result/,您可以使用 来安装它sudo apt install ./result/python3-pandasql*.deb。

  • @einpoklum 不,perl 完全是您也需要的 Debian 打包工具的一部分,无论哪种方式。pypi2deb 是纯Python。 (4认同)