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ì?
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ì?
Câu trả lời:
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
project-name.egg-info/top_level.txt
nên được tạo. Sử dụng nội dung của tệp này làm giá trị cho egg
tham số.
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 name
kwarg mà script sử dụng trong đó setup.py
như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
.
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
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 ...
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
)
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 celery
sẽ 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
và #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à master
nếu bạn không chỉ định.
ví dụ, git+https://github.com/celery/celery.git#egg=celery==4.3.0
sẽ 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=celery
sẽ 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.
pip install
tài liệu nói về#egg=name
nhưng không đưa ra câu trả lời rõ ràng.