Tại sao # egg = foo khi cài đặt pip từ git repo


96

Khi tôi thực hiện "pip install -e ..." để cài đặt từ git repo, tôi phải chỉ định # egg = somename hoặc pip phàn nàn. Ví dụ:

pip install -e git://github.com/hiidef/oauth2app.git#egg=oauth2app

Ý nghĩa của chuỗi "quả trứng" này là gì?


1
Phần này của pip installtài liệu nói về #egg=namenhưng không đưa ra câu trả lời rõ ràng.
Christian Long

Câu trả lời:


36

per pip install -h chuỗi "egg" là thư mục được kiểm tra như một phần của cài đặt


12
Đây có thể chỉ là tên giống như kho lưu trữ? Các trường hợp có vấn đề không?
CMCDragonkai

14
"Thư mục được kiểm tra"? Vậy tôi có điền tên chi nhánh không? Làm gì đó?
Chris

2
Nếu bạn đã tạo một gói Python tùy chỉnh, khi bạn chạy setuptools, một thư mục có tên project-name.egg-info/top_level.txtnên được tạo. Sử dụng nội dung của tệp này làm giá trị cho eggtham số.
dspacejs

2
Tôi dường như không thể tìm ra liệu egg=...cài đặt có thực sự quan trọng hay không. Gói mà tôi đang cài đặt có nhiều mục nhập trong tệp top_level.txt. Tôi đã thử nghiệm so khớp nó với namekwarg mà script sử dụng trong đó setup.pynhưng cũng là một giá trị tùy ý. Các kết quả dường như giống nhau. Lưu ý rằng tôi đang cài đặt bằng pip install https://...cú pháp không yêu cầu -e.
Taylor Edmiston

8

Bạn phải bao gồm # egg = Package để pip biết điều gì sẽ xảy ra tại URL đó. Xem https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

nhiều hơn về trứng


20
Điều đó có nghĩa là gì "vậy pip biết điều gì sẽ xảy ra tại url đó?" Có thứ gì khác ngoài #egg hợp lệ để nối vào url như vậy không?
Lorin Hochstein

Tôi thực sự thích câu trả lời của Will từ pip install -h, Source will be checked out into src/PACKAGE (lower-case) and installed in-place (using setup.py develop)tôi không chắc chắn rằng nó được sử dụng ở nơi khác ...
Skylar Saveland

Nó được sao chép nhưng không được cài đặt :(
holms

6

https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support cho biết:

Thành phần "tên dự án" của hậu tố url "egg = -" được sử dụng bởi pip trong logic phụ thuộc của nó để xác định dự án trước khi tải xuống pip và phân tích siêu dữ liệu. Thành phần "phiên bản" tùy chọn của tên trứng không quan trọng về mặt chức năng. Nó chỉ cung cấp một manh mối mà con người có thể đọc được về phiên bản đang được sử dụng. Đối với các dự án mà setup.py không nằm trong thư mục gốc của dự án, thành phần "thư mục con" được sử dụng. Giá trị của thành phần "thư mục con" phải là một đường dẫn bắt đầu từ thư mục gốc của dự án đến nơi đặt setup.py.

Từ điều này, tôi suy ra rằng giá trị trứng chỉ được sử dụng để kiểm tra phụ thuộc và do đó tôi nghĩ, theo quy ước, tên gói (tức là some-pypi-package-name) nên được sử dụng, không phải bất kỳ thư mục chứa nào (ví dụ some_pypi_package_name)


6

An Egg chỉ là một số mã trăn đi kèm . Trong url git, trứng là tên dự án. Hỗ trợ VCS

Thông thường, chúng tôi cài đặt các gói python từ Pypi, vì vậy bạn CHỈ chỉ định tên gói và phiên bản (hoặc giả định phiên bản mới nhất nếu bạn không chỉ định). Sau đó, Pypi tìm kiếm quả trứng nào bạn muốn và pip sẽ cài đặt quả trứng đó. pip install celerysẽ cài đặt quả trứng được xuất bản mới nhất và pip install celery[redis]sẽ cài đặt một quả trứng khác có chứa cùng gói cần tây và cũng cài đặt những quả trứng mới nhất từ ​​bất kỳ gói nào được liệt kê là phụ thuộc cho redis trong celery's setup.py.

Với đường dẫn git và gitlab, bạn chỉ định /{user|group}/{repository}.git@{tag}#egg={package-name}. có sự khác biệt giữa #egg=celery#egg=celery[redis], nhưng cả hai sẽ đến từ cùng một mã nguồn.

"tag" cũng có thể là một nhánh hoặc mã băm cam kết ngoài một thẻ thực tế. Nó được giả định là masternếu bạn không chỉ định.

ví dụ, git+https://github.com/celery/celery.git#egg=celery==4.3.0sẽ kiểm tra nhánh chính và cài đặt nó. Mặc dù bạn đã chỉ định số phiên bản, nhưng nó không được tính đến khi cài đặt. SỐ PHIÊN BẢN BỊ BỎ QUA

Khi cài đặt qua git hoặc các url VCS khác, bạn sẽ muốn tìm thẻ hoặc mã băm của phiên bản bạn cần. Ví dụ: git+https://github.com/celery/celery.git@v4.3.0#egg=celerysẽ kiểm tra cam kết được gắn thẻ "v4.3.0" và sau đó cài đặt gói từ mã nguồn đó. Giả sử các nhà bảo trì không gắn thẻ sai quá mức cho kho của họ, bạn có thể nhận được phiên bản bạn muốn như vậy.

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.