apt에 해당 패키지가 없으면 Debian/Devuan에 Python 패키지를 설치하세요.

apt에 해당 패키지가 없으면 Debian/Devuan에 Python 패키지를 설치하세요.

pandasqlDevuan(또는 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 머신

답변1

데비안이 이를 허용하지 않는다는 사실은 어딘가에서 비롯됩니다: pip시스템 전체 설치는 설계상 시스템 관리 Python 설치와 호환되지 않습니다.핍 자신도 깨달았습니다--system설치를 "기본값"에서 "사용자가 이를 지정하고 자신이 수행 중인 작업을 알고 싶어함"으로 다운그레이드 하는 경우 . 데비안은 이런 식으로 일을 망칠 수 있다는 것을 잘 알고 있으므로 pip그렇게 할 수 있는 소프트웨어를 제공하지 않습니다 .

이론에 대해서는 너무 많은 것입니다 (더 많은 배경) 왜 데비안이 이것을 막는가.

이제 연습을 해보자:

어떡해?

따라서 당신이 해야 할 일은 pip install --system pandasql데비안과 호환되고 안전한 방법으로 수행하여 종속성을 업데이트할 때 모든 것이 손상되지 않도록 하는 것입니다. 여기에는 pip 패키지에서 종속성의 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.

답변2

이미 지적했듯이, 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. 가상 환경은 한 번만 설정하면 되며 모든 사용자는 동일한 가상 환경을 사용합니다.

관련 정보