python-dev 설치 오류 : ImportError : apt_pkg라는 모듈이 없습니다.


95

저는 데비안 사용자이고 python-dev를 설치하고 싶지만 셸에서 루트로 코드를 실행할 때 :

# aptitude install python-dev

다음과 같은 오류가 발생합니다.

Traceback (most recent call last):       
  File "/usr/bin/apt-listchanges", line 28, in <module>
    import apt_pkg
ImportError: No module named apt_pkg

문제인 것 같으며 어떻게 해결할 수 있습니까?


1
당신이 시도 할 때 발생하는 분류하여 적절한 IST 같은 외모 쉽다는-받을 파이썬 - dev에 설치
피에르 가이어에게

apt-get install python-dev로 시도하면 이미 설치되어 있다고 표시됩니다. 패키지 목록 읽기 ... 완료 종속성 트리 작성 상태 정보 읽기 ... 완료 python-dev는 이미 최신 버전입니다. 0 개 업그레이드, 0 개 새로 설치, 0 개 제거 및 0 개 업그레이드 안 함. 다른 제안이 있습니까?
Belphegor

답변:


63

작동하는 python-apt 패키지가 있는지 확인하십시오. apt_pkg.so를 찾을 수없는 문제를 해결하기 위해 해당 패키지를 다시 제거하고 설치할 수 있습니다.

apt-get install python-apt

이미 설치되어 있습니다. 내가 쳤을 때 : # apt-get install python-apt 그것은 나에게 준다 패키지 목록 읽기 ... 완료 의존성 트리 작성 상태 정보 읽기 ... 완료 python-apt는 이미 최신 버전입니다. 0 개 업그레이드, 0 개 새로 설치, 0 개 제거 및 0 개 업그레이드 안 함. 그리고 다시 시도하면 : # aptitude install python-dev 같은 오류가 다시 발생합니다. 다른 아이디어는 어떻게해야합니까?
Belphegor

14
사용하여 제거 apt-get remove --purge python-apt하고 다시 설치
Arnestig

8
다른 종속성에 유의하십시오. 우분투에서 패키지를 (너무) 빨리 제거했고 다른 많은 종속성도 제거했습니다 (예 : ubuntu-desktop). 그러나 일지에있는 메모에주의를 기울이지 않은 것은 내 잘못입니다.
Al R.

1
그것이 python-apt 때문인지 확실하지 않습니다. 에서 살펴 packages.ubuntu.com/lucid/ubuntu-desktop 우분투 데스크톱에 종속성.
Arnestig

2
@Arnestig REMOVING은 python-apt다소 위험한 것 같습니다! 내 교훈을 한 번 배웠고 시도하지 않을 것입니다.
alvas

140

나는 할 때이 문제를 만났다 sudo apt-get update. 내 환경은 debian8이며 python2.7 + 3.4 (기본값) + 3.5입니다.

다음 코드는 apt_pkg....sopython 3.5 용 파일 만 다시 생성합니다.

sudo apt-get install python3-apt --reinstall

다음 코드는 내 문제를 해결했습니다.

cd /usr/lib/python3/dist-packages
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so

따라서 python3-apt는 현재 사용중인 Python 버전 대신 가장 높은 Python 버전을 확인합니다.


27
sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so변경되어야합니다 sudo ln -s apt_pkg.cpython-{35m,34m}-x86_64-linux-gnu.so apt_pkg.so
desaiankitb

38
진짜 대단한데! 저 sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so에게는 python3.6 용이었고이 끔찍한 버그는 이제 사라졌습니다.
Alex Gurrola

54
우분투 18.04의 기본 3.6 파이썬 3.7 옆에 설치 한 후 sudo apt install python3.7내가 실행하는 데 필요한 있도록이 apt_pkg 오류, 주사위를 실행하려고 가지고 cd /usr/lib/python3/dist-packages다음 sudo ln -s apt_pkg.cpython-{36m,37m}-x86_64-linux-gnu.so다음 sudo apt install python3-pip.
abulka

3
파이썬 3.6를 들어, 명령이 될 것입니다sudo ln -s apt_pkg.cpython-{35m,36m}-x86_64-linux-gnu.so
StatguyUser

1
이러한 중괄호는 ln 명령의 속성이 아닙니다. 쉘 중괄호 확장을 호출합니다. gnu.org/software/bash/manual/html_node/Brace-Expansion.html
Carlos A. Ibarra

113

다음과 같이 해결하십시오.

/usr/lib/python3/dist-packages# cp apt_pkg.cpython-34m-i386-linux-gnu.so apt_pkg.so

또는:

/usr/lib/python3/dist-packages# cp apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so

당신이 얻는 경우에 기본적으로, No such file or directory단지 ls올바른 이름을 얻으려고합니다.


완벽하게 작동합니다
Subhrajyoti Sen

3
우분투 18.04에서이 $ CD를 사용하여는 / usr / lib 디렉토리 / python3 / DIST-패키지 $ sudo는 CP apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
NAREN Yellavula

이것은 내가 모든 파일을 나열 ...뿐만 아니라 나를 위해 일한 /usr/lib/python3/dist-packages, 나는의하지 않았다 I 톱 apt_pkg.cpython-34m-i386-linux-gnu.so이나 apt_pkg.cpython-3m-i386-linux-gnu.so,하지만 난이 있었다 apt_pkg.cpython-36m-i386-linux-gnu.so나는이 파일을 복사 ... apt_pkg.so완벽했다! 감사!
Leonardo Isso 19 년

이것은 나에게도 효과적이었습니다. @LeonardoIsso처럼 32 비트 Linux를 사용하고 있기 때문에 적절한 파일 이름을 찾기 위해 모든 파일을 나열했습니다.
w3Develops

59

이것은 내가 deadsnakes 저장소에서 Python3.7을 설치하려고 시도한 후 Ubuntu 18.04.2에서 나에게 발생했습니다.

해결책은 이것이었습니다

1) cd /usr/lib/python3/dist-packages/

2) sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so


3
이것이 실제로 저에게 효과적이라는 것을 다른 사람들에게 확인하고 싶었습니다.
AnthonyD973

2
미쳤어, 고마워! 도커에있을 때 :RUN ln -s /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/apt_pkg.so
loretoparisi

2
네, 그게 해결책이었습니다 :)
szedjani

1
이것이 해결책입니다! Python 3.7로 업그레이드 한 후.
JOHN

1
18.04.04, python 3.7로 업그레이드하고 이것은 나에게도 효과적이었습니다! 감사!!
RJaus

18

이 오류는 최신 버전의 Python이 이전 버전과 함께 설치되었을 때 자주 발생합니다.

  • Ubuntu 18.04.1은 Python 버전 3.6.6과 함께 제공됩니다.
  • 설치된 ppa : deadsnakes / python3.7.1 또는 대안
  • apt_pkg 모듈을 사용하는 명령을 실행하고 다음과 같은 오류가 발생합니다.

        from CommandNotFound.db.db import SqliteDatabase
    File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
        import apt_pkg
    

apt를 사용하여 비 distro python3 버전을 설치하면 공유 모듈 디렉토리가 python3의 디렉토리로 설정되며 일반적으로 /usr/lib/python3.

대부분의 경우 괜찮을 것입니다. 그러나 어떤 상황에서는 다른 버전의 파이썬이 다른 파이썬 버전과 다른 라이브러리 또는 공유 객체 / 라이브러리에 의존하므로 다른 답변에서 지적했듯이 .SO를 올바른 파이썬 버전. 따라서 64 비트 시스템에 python3.6이 설치되어 있다면 apt_pkg .SO 링크는 다음과 같습니다.

sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so

그러나 문제는 최신 Python 버전을 설치할 때 링크가 최신 Python 버전을 가리 키도록 업데이트되어 apt_pkg 모듈을 찾을 수 없다는 오류가 발생한다는 사실에 있습니다. 배포판과 함께 제공되는 Python 버전을 확인하여 위와 같이 링크를 만들 수 있습니다. 또는 다음과 같이 .SO를 링크하기 위해 Python 버전을 선택할 수있는 명령을 제공하는 방법을 사용합니다.

sudo ln -s apt_pkg.cpython-{36m,35m,34m}-x86_64-linux-gnu.so apt_pkg.so

파이썬은 가장 최근에 설치된 파이썬 버전에 대한이 링크를 생성하기 때문에 우리는 주어진 가장 높은 버전을 선택하는 3 가지 파이썬 버전 중에서 선택할 수있는 옵션을 명령에 제공합니다.


2
18.04.2를 실행하면 첫 번째 권장 사항이 저에게 효과적이었고 마침내 오류없이 sudo apt-get 업데이트를 실행할 수있었습니다. 두 번째 권장 사항은 apt-get.so가 폴더가 아니라는 오류를 반환합니다.
CloseISQ

15

@ user8178061 의 솔루션은 잘 작동했지만 python3.7Ubuntu와 함께 내 버전에 대한 일부 수정으로 수행했습니다.

나는 교체 apt_pkg.cpython-3m-i386-linux-gnu.so와 함께apt_pkg.cpython-36m-x86_64-linux-gnu.so

실행할 두 명령은 다음과 같습니다.

cd /usr/lib/python3/dist-packages

sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so


1
이것은 내 문제를 해결했습니다. 이것은 Python 버전을 3.6에서 3.7로 전환하여 발생한 문제를 해결합니다.
JThistle

1
감사합니다. 같은 문제가 발생했습니다! 사용을 고려하여 sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so무엇인지 명확하게하십시오 apt_pkg.so.
Scipio

일했지만 sudo cp apt_pkg.cpython-37m-x86_64-linux-gnu.so apt_pkg.so어떤 이유로 변경해야했습니다
Daniel

8

이것은 ubuntu18.04에서 python3.7을 업데이트 한 후 나를 위해 일했습니다.

cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so

1
이것은 ubuntu18.04에서 python 3.8 을 업그레이드 한 후 저에게 효과적이었습니다.
Henry Palacios

6

어떤 이유로 내 설치가 apt_pkg.sopython3 dist-packages dir 에 누락되었습니다 . ( apt_pkg.cpython-33m-x86_64-linux-gnu.so거기 있었나요?!)하지만 심볼릭 링크를 만들어야했습니다 apt_pkg.so -> apt_pkg.cpython-33m-x86_64-linux-gnu.so ./usr/lib/python3/dist-packages

업그레이드가 실패했는지 또는 왜 그런지 잘 모르겠습니다. 업그레이드 시도 후 발생 (정확-> 희귀-> 양적 업그레이드)


이것은 나를 위해 올바른 수정이었습니다. 나는 그것이 나쁜 생각이라는 것을 알았음에도 불구하고 pip3를 루트로 사용 하여이 문제를 일으켰습니다. 조명 소켓에 손가락을 넣으면 얼마나 충격을 받을지 알고 싶었습니다. 답은 꽤 나쁩니다. 또한 / etc / alternatives 설정을 엉망으로 만드는 것은 마음에 들지 않습니다. 시간제 방문자 인 사람에게는 해당되지 않습니다. 나는 파이썬 링크가 지적한 파이썬 링크가 나를 재난의 길로 시작한 문제라고 생각합니다.
pauljohn32

6
  1. 기본 Python 3 버전을 확인하십시오.
python --version
Python 3.7.5
  1. cd/usr/lib/python3/dist-packages와 것은 확인 apt_pkg.*파일을. 기본 Python 버전에는 없음을 알 수 있습니다.
ll apt_pkg.*
apt_pkg.cpython-36m-x86_64-linux-gnu.so
  1. 심볼릭 링크를 만듭니다.
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.cpython-37m-x86_64- linux-gnu.so 

5

최후의 수단이다 sudo cp /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/apt_pkg.cpython-36m-x86_64-linux-gnu.so 경우 ln명령은 당신을 위해 너무 많이 또는 어떻게 든 마술 작동하지 않습니다.

cp위의 mv경우 하나의 Python 버전 만 사용하는 경우 에도 마찬가지 입니다.


3

Python 3.5를 사용하는 경우 3.4로 다운 그레이드합니다. 이것이 가장 안전한 방법입니다.

에서 /usr/lib/python3/dist-packages당신을 볼 수 있습니다 *34m*3.5 사용할 수있는 파이썬. zhazha 대답 symlink 그것에.


어떻게 다운 그레이드합니까?
Pynchia

다운 그레이드가 가장 안전한 액틴 인 이유는 무엇입니까?
David Medinets

3

에 대한 심볼릭 링크를 만드는 것 외에도 와 같은 방식으로 apt_pkg.so만들 수 있습니다 .apt_inst.soapt_pkg.so

ln -s apt_inst.cpython-35m-x86_64-linux-gnu.so apt_inst.so 

3

Python 3.7을 사용하는 경우 Alternatives를 업데이트하여 Python 3.6으로 다운 그레이드하면 저에게 효과적이었습니다.

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 1

sudo update-alternatives --config python3

이것은 python3.6에서 나를 위해 일했지만 python3.7로 되 돌리면 오류가 여전히 존재합니다
Hugo Sohm

1

나는 모든 사람들이 이상한 복사 등으로 그것을 고치는 방법을 말하는 것을 보았지만 아무도 문제가 발생하는 이유를 정말로 말하지 않았습니다 .

그래서 누군가가 그렇게 말했기 때문에 시스템 파일을 엉망으로 만들고 싶지 않은 사람들을 위해 설명하겠습니다.


문제는 다음과 같습니다.

  • 많은 시스템 스크립트에는 python3 shebang이 하드 코딩되어 있습니다. 직접 확인할 수 있습니다.
~$ grep -R "\#\!/usr/bin/python3" /usr/lib/*

/usr/lib/cnf-update-db:#!/usr/bin/python3
/usr/lib/command-not-found:#!/usr/bin/python3
/usr/lib/cups/filter/pstotiff:#!/usr/bin/python3
/usr/lib/cups/filter/rastertosag-gdi:#!/usr/bin/python3 -u
grep: /usr/lib/cups/backend/cups-brf: Permission denied
/usr/lib/cups/backend/hpfax:#!/usr/bin/python3
/usr/lib/language-selector/ls-dbus-backend:#!/usr/bin/python3
/usr/lib/python3/dist-packages/language_support_pkgs.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/installdriver.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/openprinting.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/xmldriverprefs.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/smburi.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/ppds.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/cupshelpers/debug.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/DistUpgrade/dist-upgrade.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/CommandNotFound/db/db.py:#!/usr/bin/python3
/usr/lib/python3/dist-packages/Quirks/quirkreader.py:#!/usr/bin/python3
grep: /usr/lib/ssl/private: Permission denied
/usr/lib/system-service/system-service-d:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/check-new-release-gtk:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/do-partial-upgrade:#!/usr/bin/python3
/usr/lib/ubuntu-release-upgrader/check-new-release:#!/usr/bin/python3
/usr/lib/update-notifier/package-data-downloader:#!/usr/bin/python3
/usr/lib/update-notifier/backend_helper.py:#!/usr/bin/python3
/usr/lib/update-notifier/apt_check.py:#!/usr/bin/python3
/usr/lib/update-notifier/apt-check:#!/usr/bin/python3

  • python apt 패키지 python-apt/ python3-apt는 시스템 패키지이므로 기본 시스템 python 용입니다.

따라서 스크립트는 항상 현재에 연결된 버전을 가져 python3오지만 apt 패키지가 없기 때문에 실패합니다.


일반적인 해결책 : 기본 python3링크를 변경하지 마십시오 . 이제까지. 이는 python링크 에도 적용됩니다 . 앱이 Python3에서 작동하지 않는 일부 오래된 구문 요소를 사용하여 Python2로 작성된 경우 앱이 작동하지 않습니다.

[Python3과 호환되지 않는 Python2.7로 작성된 터미네이터를 사용하기 때문에 터미널이 고장났습니다.]


여기에 제시된 솔루션은 적절한 패키지 파일 복사 / 링크 또는 python3링크 변경을 제안 합니다.

두 가지를 모두 분석해 보겠습니다.

  1. apt 패키지 복사 / 연결

Python3.4 주변에서는 모든 Python 스크립트가 최신 버전에서도 작동하므로 이것은 문제 가되지 않습니다 .

지금까지. 그러나 시스템을 충분히 오래 유지하면 미래에 중단 될 수 있습니다.

  1. python3다시 링크 변경

"절대 링크를 변경하지 않음"으로 돌아갈 수 있기 때문에 이것은 훌륭한 솔루션입니다.


"하지만 그냥 타이핑하는 게 python좋아요!" - 나도 좋아해! 이것이 제가 처음에이 문제를 해결 한 방법입니다!

  1. 일반적으로 시스템 링크를 수동으로 변경하는 것을 피해야합니다. update-alternatives대신 다른 버전을 링크하는 데 사용 하십시오 . 이는 버전이 많은 모든 앱에 적용됩니다. 이것은 여전히 ​​시스템 스크립트를 깨뜨릴 것입니다 (링크를 변경하기 때문입니다). 그러나 링크와 목적지를 올바른 순서로 놓았는지 또는 오타를 만들 었는지 걱정하지 않고 쉽게 앞뒤로 전환 할 수 있습니다.

  2. 링크 또는 별칭에 python/ 이외의 다른 이름을 사용하는 것이 좋습니다 python3.

  3. 또는 시스템 링크를 변경하지 않고 자신의 python/ python3링크를 PATH에 추가하십시오 (가상 환경과 마찬가지로).


0

Windows 10 WSL v1 (Ubuntu 16.04.6 LTS)

reddit 답변 (약간 수정 됨)

sudo ln -sfn /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so apt_pkg.so



0

나를 위해 일한 답변이 없습니다 (Ubuntu 16.04 및 Python 3.6을 사용하고 있습니다). 그래서 마침내 다음과 같이 문제를 해결했습니다.

1- 서버의 FTP에 연결

2- "/ usr / lib / python3 / dist-packages /"폴더로 이동합니다.

3- "apt_pkg.cpython-3 5 m-x86_64-linux-gnu.so" 파일 복제

4-이 복제 된 파일의 이름을 "apt_pkg.cpython-3 6 m-x86_64-linux-gnu.so"로 바꿉니다.

그게 다야!


0

저는 Ubuntu 16.04를 사용 중이며 Python 3.7로 업그레이드했습니다. 다음은 PPA를 추가하려고 할 때 발생한 오류입니다.

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test                                           
Traceback (most recent call last):
  File "/usr/bin/add-apt-repository", line 11, in <module>
    from softwareproperties.SoftwareProperties import SoftwareProperties, shortcut_handler
  File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 27, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

다음 심볼릭 링크를 만들어 초기 python 3.4 apt_pkg.cpython-34m-x86_64-linux-gnu.so와 심볼릭 링크를 만들어이 오류를 수정할 수있었습니다.

sudo ln -s apt_pkg.cpython-34m-x86_64-linux-gnu.so apt_pkg.so

1
이 솔루션은이 질문에 대한 최소 6 개의 다른 답변에서 이미 제안 된 것 같습니다 (심볼 링크 대신 파일을 복사하도록 제안 된 3 개 이상).
Sergey Shubin

이것은 단순히 나를 위해 작동합니다, 감사합니다! 한 가지는 그 전에 / usr / lib / python3 / dist-packages를 cd해야한다는 것입니다
Hao Yellow

-3

로케일 변수를 설정하여이 문제를 해결하십시오.

export LC_ALL="en_US.UTF-8"

export LC_CTYPE="en_US.UTF-8"

1
더 구체적으로 설명하고이 두 명령이 수행하는 작업을 설명하십시오.
dpapadopoulos

-5

다른 사람에게 도움이되는 경우를 대비하여 python3 링크를 리디렉션 한 다음 올바른 Python 버전으로 리디렉션하여 Python 버전 충돌로 인해 발생한이 문제를 마침내 해결했습니다.

sudo rm /usr/bin/python3
sudo ln -s /usr/bin/python3.4

다음에서 찾은 올바른 Python 버전을 입력해야 할 수 있습니다.

python3 -V

2
LN -s /usr/bin/python3.4는 / usr / 빈 / python3 : 제거 python3는 파이썬 3.4 사용에 링크하려면 나쁜 생각 :(이다
Pamungkas Jayuda

1
정말로 필요하지 않는 한 사람들에게 시스템에서 물건을 제거하라고 말하는 것은 결코 좋은 생각이 아닙니다. 다행히 / usr / bin / python3은 일반적으로 어쨌든 심볼릭 링크입니다. 이 답변을 삭제해야한다고 생각합니다.
Jamie Lindsey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.