AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 761358
Accepted
einpoklum
einpoklum
Asked: 2023-11-13 18:17:11 +0800 CST2023-11-13 18:17:11 +0800 CST 2023-11-13 18:17:11 +0800 CST

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

  • 772

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

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

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.
    
    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.
    
    See /usr/share/doc/python3.11/README.venv for more information.

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

注意事项:

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

2 个回答

  • Voted
  1. Best Answer
    Marcus Müller
    2023-11-13T19:27:35+08:002023-11-13T19:27:35+08:00

    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
    

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

    sudo apt install python3-all python3-numpy python3-pandas python3-setuptools python3-sqlalchemy
    

    让安装运行并再次尝试

    py2dsp --build pandasql
    

    成功了!

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

    • 10
  2. szmoore
    2023-11-14T12:46:10+08:002023-11-14T12:46:10+08:00

    正如已经指出的,pip 不再允许您在系统范围内安装软件包是有充分理由的,但我也为大量可能有权访问同一台计算机并期望软件“正常工作”的用户提供了这个用例管理软件无需开发人员具备设置软件的知识。

    当用户尝试自己安装时,会导致安装许多不同的版本,其中一些版本得到更新,但另一些则没有,以及“它适用于我,但不适用于其他所有人”的情况。我们还为每个用户提供大型软件包的独立副本,从而使用大量磁盘空间。

    目前在 debian:bookworm 中对我有用的解决方案是为名为 的特殊用户和组安装软件包python-global,然后允许其他用户通过操作变量来继承该用户的软件包PYTHONPATH。

    安装包看起来像:

    sudo -u python-global python3 -m pip install <x> --break-system-packages
    

    里面/etc/profile.d/python-global.sh有这样的代码:

    if [ -z "${__SOURCED_PYTHON_GLOBAL__}" ]; then
        export PYTHONPATH="/home/python-global/python-packages/:$PYTHONPATH";
        export PATH="/home/python-global/.local/bin/:$PATH";
        export __SOURCED_PYTHON_GLOBAL__=1;
    fi;
    

    虽然这有时仍可能导致与系统包发生冲突,但用户可以相对轻松地通过清除变量(PYTHONPATH如果需要)来禁用它。或者他们可以__SOURCED_PYTHON_GLOBAL__自行设置.profile以避免更改。

    您可能需要做额外的工作,因为/etc/profile.d不会自动获取,具体取决于您的登录管理器。/etc/X11/Xsession.d/您可能还需要创建一个副本。

    如果使用描述为“破坏系统”的标志让您感到紧张,您可以将此处替换--break-system-packages为用户拥有的适当虚拟环境python-global。虚拟环境只需设置一次,每个用户都使用相同的虚拟环境。

    • 2

相关问题

  • GRUB 配置以识别同一 Linux 发行版的不同桌面环境(安装)

  • astyle 不会更改源文件格式

  • 接收有关全新 Debian 的电子邮件

  • Debian Stretch:libgs_plugin_systemd-updates.so 中的 gnome-software 段错误

  • 如何在拼音输入法中输入ü?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve