Apa yang ditunjukkan oleh "error: option --single-version-externally-managed tidak dikenali"?

102

Sepertinya saya tiba-tiba mulai menjumpai kesalahan error: option --single-version-externally-managed not recognizedsaat menggunakan pip installpaket varions (termasuk PyObjCdan astropy). Saya belum pernah melihat kesalahan ini sebelumnya, tetapi sekarang kesalahan ini juga muncul di bangunan travis-ci yang tidak ada yang berubah.

Apakah kesalahan ini menunjukkan distribusi yang kedaluwarsa? Atau beberapa opsi yang salah ditentukan setup.py? Atau sesuatu yang sama sekali lain?

keflavich.dll
sumber

Jawaban:

84

Pembaruan Baru:

Pasang versi terbaru setuptools. Jika Anda masih mendapatkan kesalahan, instal wheeljuga.

pip install -U setuptools
pip install -U wheel

Jawaban Asli / Lebih Detail:

--single-version-externally-managed adalah opsi yang digunakan untuk paket Python yang menginstruksikan modul setuptools untuk membuat paket Python yang dapat dengan mudah dikelola oleh manajer paket host jika diperlukan, seperti Yum atau Apt.

Jika Anda melihat pesan ini, Anda mungkin menggunakan setuptools atau Python versi lama. Coba gunakan Distribute, yang merupakan versi terbaru dari setuptools dan kompatibel dengan versi sebelumnya. Paket-paket ini mungkin berharap Anda sudah memilikinya.

https://pypi.python.org/pypi/distribute

Edit: Pada titik ini, distribusi telah digabungkan ke dalam setuptoolsproyek utama . Cukup instal versi terbaru setuptools. Seperti yang ditunjukkan @wynemo, Anda mungkin ingin menggunakan --eggopsi ini, karena ini lebih sesuai bagi mereka yang melakukan instalasi manual di mana Anda tidak bermaksud membuat paket sistem untuk distribusi.

Kelketek
sumber
1
Bisakah Anda menambahkan versi mana yang muncul? Saya menggunakan setuptools 0.6 dan pip tidak tahu tentang versi yang lebih baru. distributekedengarannya benar, tapi saya tidak bisa mengimpornya ...
keflavich
Kamu tidak import distribute. Distribute adalah pengganti drop-in dan memiliki nama modul yang sama. import setuptoolsdibutuhkan untuk itu juga.
Kelketek
Hal yang harus dilakukan, kemudian, adalah memastikan setuptools tidak menimpa distribusi, jika Anda telah menginstal keduanya. Anda harus menginstal distribut with pip, lalu menghapus setuptools. Saya membayangkan itu seharusnya berhasil.
Kelketek
17
Ini harus ditambahkan: Jangan gunakan distribusikan lagi. Distribusi telah digabungkan kembali ke dalam proyek setuptools, jadi sekarang hanya ada satu setuptoolsuntuk mengatur semuanya.
Iguananaut
1
@johntex, jawaban ini dibuat lebih dari setahun yang lalu, ketika distribut dan setuptools belum digabungkan (atau jika sudah, saya belum pernah mendengarnya). Saya telah memperbaruinya sekarang.
Kelketek
136

Tambahkan --eggopsi

pip install --egg SCons

Saya menggunakan pipversi 1.4.1

wynemo.dll
sumber
10
Itulah satu-satunya solusi yang benar-benar membantu. Pip dan setuptools baru-baru ini sudah diinstal, namun saya membenci kesalahan ini.
Michael
Saya mengalami masalah ini dengan pyenv dan ini memperbaikinya.
glaucon
13
Adakah yang bisa menjelaskan secara rinci apa arti opsi ini dan mengapa ini berfungsi?
kawing-chiu
4
Sementara ini berhasil untuk saya, saya juga mendapatkan kesalahan: "DEPRECATION: --egg telah dihentikan dan akan dihapus di masa mendatang. Tanda ini sama-sama eksklusif dengan sebagian besar pip, dan sebenarnya menggunakannya membatalkan kemampuan pip untuk mengelola proses instalasi. "
natersoz
2
no such option: --eggdi pip 18.1
gdw2
45

Menginstal wheelmenyelesaikan masalah ini dengan yang terbaru pip(saya menggunakan 8.1.2):

pip install wheel
Seth Difley
sumber
Anda dapat kembali mengedit jika Anda suka, tidak masalah. Jika Anda mengetahui versi persisnya pipdan di wheelmana perbaikannya, mungkin perlu untuk menyebutkannya seandainya akan rusak lagi. Dan juga, jawabannya tidak menjelaskan apa yang sedang terjadi.
anatoly techtonik
Jawaban plus dari @sparrowt ini memperbaiki masalah saya
David Poxon
7

Coba tingkatkan alat penyiapan seperti ini:

pip install --upgrade setuptools

burung gereja
sumber
5

Saya mengalami masalah ini. Ternyata itu masalah dengan izin file pada cache pip saya.

Jika Anda melihat pesan di awal keluaran pip Anda seperti

The directory '/home/ubuntu/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/ubuntu/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

Anda mungkin memiliki masalah yang sama. Anda dapat mengatasinya dengan memastikan bahwa Anda memiliki izin file yang tepat pada cache pip Anda (seperti chown -R $(whoami) /home/ubuntu/.cache/pip) atau, jika Anda menggunakan UNIX, Anda dapat mengatur lokasi pip cache dengan XDG_CACHE_HOMEenv var ke beberapa folder yang Anda miliki.

tanpa
sumber
Anehnya, ini juga berhasil untuk saya (jika Anda menggunakan sudountuk menginstal paket, pastikan untuk menambahkan -Hbendera)! Saya benar-benar tidak melihat apa hubungan antara cache dan kesalahan opsi perintah, tapi sudahlah.
Delgan
1

Saya mencoba solusi di atas. Namun, saya hanya dapat menyelesaikan masalah sampai saya melakukan:

sudo pip3 install -U pip (untuk python3)

Karim
sumber
0

Saya memiliki masalah ini di macbook saya juga ketika saya mencoba memutakhirkan satu paket python. Saya memeriksa versi pip di OS X, itu terlalu lama: 1.1. Saya menggunakan follow cmd untuk mengupgrade pip ke 1.5.6

easy_install -U pip

Kemudian kesalahan ini diperbaiki.

NewPtone
sumber