"Error: option --single-version-external-management-external-management không được công nhận" biểu thị điều gì?


102

Tôi dường như đột nhiên bắt đầu gặp phải lỗi error: option --single-version-externally-managed not recognizedkhi pip installnhập các gói biến thể (bao gồm PyObjCastropy). Tôi chưa bao giờ thấy lỗi này trước đây, nhưng hiện nó cũng hiển thị trên các bản dựng travis-ci mà không có gì thay đổi.

Lỗi này có cho thấy phân phối lỗi thời không? Hoặc một số tùy chọn được chỉ định không chính xác trong setup.py? Hay một cái gì đó hoàn toàn khác?

Câu trả lời:


84

Cập nhật mới:

Cài đặt phiên bản mới nhất của setuptools. Nếu bạn vẫn gặp lỗi, hãy cài đặt luôn wheel.

pip install -U setuptools
pip install -U wheel

Câu trả lời gốc / Chi tiết khác:

--single-version-externally-managed là một tùy chọn được sử dụng cho các gói Python hướng dẫn mô-đun setuptools để tạo một gói Python có thể dễ dàng được quản lý bởi trình quản lý gói của máy chủ lưu trữ nếu cần, như Yum hoặc Apt.

Nếu bạn nhìn thấy thông báo này, bạn có thể có phiên bản setuptools hoặc Python cũ. Hãy thử sử dụng Phân phối, là phiên bản mới hơn của công cụ thiết lập và tương thích ngược. Các gói này có thể mong đợi rằng bạn đã có nó.

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

Chỉnh sửa: Tại thời điểm này, phân phối đã được hợp nhất vào setuptoolsdự án chính . Chỉ cần cài đặt phiên bản mới nhất của setuptools. Như @wynemo đã chỉ ra, bạn có thể muốn sử dụng --eggtùy chọn thay thế, vì tùy chọn này thích hợp hơn cho những người thực hiện cài đặt thủ công mà bạn không có ý định tạo gói hệ thống để phân phối.


1
Bạn có thể thêm phiên bản đã hiển thị trong không? Tôi đang sử dụng setuptools 0.6 và pip không biết về phiên bản mới hơn. distributeâm thanh đúng, nhưng tôi không thể import nó ...
keflavich

Bạn không import distribute. Phân phối là một thay thế thả vào và có cùng tên mô-đun. import setuptoolscũng cần thiết cho nó.
Kelketek

Điều cần làm là đảm bảo rằng setuptools không ghi đè phân phối nếu bạn đã cài đặt cả hai. Bạn nên cài đặt phân phối bằng pip, sau đó gỡ bỏ setuptools. Tôi tưởng tượng điều đó sẽ hoạt động.
Kelketek

17
Cần nói thêm: Không sử dụng phân phối nữa. Phân phối đã được hợp nhất trở lại dự án setuptools, vì vậy bây giờ chỉ có một phân phối setuptoolsđể thống trị tất cả.
Iguananaut

1
@johntex, câu trả lời này đã được đưa ra hơn một năm trước, khi các công cụ phân phối và thiết lập chưa được hợp nhất (hoặc nếu chúng có, tôi chưa nghe nói về nó). Tôi đã cập nhật nó ngay bây giờ.
Kelketek

136

Thêm --eggtùy chọn

pip install --egg SCons

Tôi sử dụng pipphiên bản 1.4.1


10
Đó là giải pháp duy nhất thực sự hữu ích. Các công cụ thiết lập và pip gần đây đã được cài đặt, tuy nhiên tôi vẫn mắc lỗi này.
Michael

Tôi đã gặp sự cố này với pyenv và điều này đã khắc phục được.
glaucon

13
Ai đó có thể giải thích chi tiết tùy chọn này có nghĩa là gì và tại sao điều này lại hoạt động không?
kawing-chiu

4
Mặc dù điều này hiệu quả với tôi, nhưng tôi cũng gặp lỗi: "DEPRECATION: --egg đã không được dùng nữa và sẽ bị xóa trong tương lai. Cờ này loại trừ lẫn nhau với các phần lớn của pip và thực sự việc sử dụng nó làm mất hiệu lực khả năng quản lý quá trình cài đặt. "
natersoz

2
no such option: --eggtính bằng pip 18,1
gdw2

45

Cài đặt đã wheelgiải quyết vấn đề này với gần đây pip(tôi đã sử dụng 8.1.2):

pip install wheel

Bạn có thể hoàn nguyên để chỉnh sửa nếu muốn, không vấn đề gì. Nếu bạn biết chính xác phiên bản pipwheelnơi nó đã được sửa, bạn nên đề cập đến nó trong trường hợp nó sẽ bị hỏng một lần nữa. Và dù sao thì câu trả lời cũng không giải thích được chuyện gì đang xảy ra.
anatoly techtonik

Đây câu trả lời cộng với từ @sparrowt cố định vấn đề của tôi
David Poxon

7

Hãy thử nâng cấp các công cụ thiết lập như thế này:

pip install --upgrade setuptools


5

Tôi đã gặp vấn đề này. Hóa ra đó là vấn đề với quyền đối với tệp trên bộ nhớ cache pip của tôi.

Nếu bạn thấy một thông báo ở đầu đầu ra pip của bạn như

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.

bạn có thể có cùng một vấn đề. Bạn có thể giải quyết nó bằng cách đảm bảo rằng bạn có quyền tệp thích hợp trên bộ đệm pip của mình (chẳng hạn như chown -R $(whoami) /home/ubuntu/.cache/pip) hoặc, nếu bạn đang sử dụng UNIX, bạn có thể đặt vị trí bộ đệm pip bằng XDG_CACHE_HOMEenv var vào một số thư mục bạn sở hữu.


Đáng ngạc nhiên, nó cũng hoạt động đối với tôi (nếu bạn sử dụng sudođể cài đặt gói, hãy nhớ thêm -Hcờ)! Tôi thực sự không thấy kết nối giữa bộ nhớ cache và lỗi tùy chọn lệnh là gì, nhưng đừng bận tâm.
Delgan 14/09/17

1

Tôi đã thử các giải pháp trên. Tuy nhiên, tôi chỉ có thể giải quyết sự cố cho đến khi:

sudo pip3 install -U pip (dành cho python3)


0

Tôi cũng gặp sự cố này trên macbook của mình khi tôi cố gắng nâng cấp một gói python. Tôi kiểm tra phiên bản pip trong OS X, nó quá cũ: 1.1. Tôi sử dụng follow cmd để nâng cấp pip lên 1.5.6

easy_install -U pip

Sau đó, lỗi này được sửa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.