Làm thế nào để nêu trong request.txt một nguồn github trực tiếp


448

Tôi đã cài đặt thư viện bằng lệnh

pip install git+git://github.com/mozilla/elasticutils.git

cài đặt nó trực tiếp từ kho lưu trữ Github. Điều này hoạt động tốt và tôi muốn có sự phụ thuộc đó trong tôi requirements.txt. Tôi đã xem các vé khác như thế này nhưng điều đó không giải quyết được vấn đề của tôi. Nếu tôi đặt một cái gì đó như

-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev

trong requirements.txttệp, pip install -r requirements.txtkết quả ở đầu ra sau:

Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
  Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))

Các tài liệu hướng dẫn của tập tin yêu cầu không đề cập đến các liên kết bằng cách sử dụng git+gitspecifier giao thức, vì vậy có lẽ đây chỉ là không được hỗ trợ.

Có ai có một giải pháp cho vấn đề của tôi?

Câu trả lời:


327

thể sử dụng cú pháp của các gói có thể chỉnh sửa trong các gói có thể được sử dụng requirements.txtđể nhập các gói từ nhiều loại VCS (git, hg, bzr, svn) :

-e git://github.com/mozilla/elasticutils.git#egg=elasticutils

Ngoài ra, có thể trỏ đến cam kết cụ thể:

-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils

3
Tôi đã không quản lý để kiểm tra cục bộ một phiên bản có thể chỉnh sửa như vậy (có thể do vấn đề cú pháp) và do đó đã kết thúc bằng cách sử dụng git+gitbiến thể (hoạt động). Trong requirements.txtphiên bản của bạn hoạt động, vì vậy cảm ơn bạn rất nhiều :)
Alfe

1
Các docsliên kết không hoạt động đối với tôi; Tôi đã sử dụng một cái cũ hơn .
osa

42
Điều tôi không hiểu là cú pháp hiển thị chính xác là những gì được yêu cầu, tức là không có tên gói trước -e.
hiền triết

5
Thêm "-e" không cần thiết tùy thuộc vào việc bạn có muốn gói đó ở chế độ có thể chỉnh sửa hay không, xem câu trả lời của @qff.
Bầu trời

17
Không nên -e git+git://thay thế -e git://? Tôi nhận được thông báo lỗi "nên là đường dẫn đến dự án cục bộ hoặc url VCS bắt đầu bằng thông báo lỗi svn +, git +, hg + hoặc bzr +" .
Bruce Wayne

424

Thông thường requirements.txttập tin của bạn sẽ trông giống như thế này:

package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...

Để chỉ định repo Github, bạn không cần package-name==quy ước.

Các ví dụ dưới đây cập nhật package-twobằng repo GitHub. Văn bản giữa @#biểu thị các chi tiết cụ thể của gói.

Chỉ định cam kết băm ( 41b95ectrong bối cảnh cập nhật requirements.txt):

package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1

Chỉ định tên chi nhánh ( master):

git+git://github.com/path/to/package-two@master#egg=package-two

Chỉ định thẻ ( 0.1):

git+git://github.com/path/to/package-two@0.1#egg=package-two

Chỉ định phát hành ( 3.7.1):

git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two

Lưu ý rằng đó #egg=package-twokhông phải là một nhận xét ở đây, nó là để nêu rõ tên gói

Bài đăng blog này có một số thảo luận thêm về chủ đề.


54
Trong số tất cả các câu trả lời khác, tôi không thể tin rằng không ai trong số họ chỉ đưa ra một tệp yêu cầu với sự pha trộn của các reqs "bình thường" với một git được ném vào để so sánh. Tôi đã bị loại bỏ bởi những gì trông giống như -ecác tùy chọn dòng lệnh ( ). Cảm ơn vì đã thể hiện sự pha trộn của cả hai để tôi có thể đặt nó trong bối cảnh!
Hendy

Chỉ vào việc phát hành 3.7.1với tôi git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-twođã không làm việc. Những gì làm việc cho tôi là git+git://github.com/path/to/package-two@3.7.1#egg=package-two.
Jean Paul

Câu trả lời này rất hữu ích. Một điều mặc dù. Những git+git://...ký hiệu này bằng cách nào đó đã gây ra lỗi tương đối ssh trên hộp Linux của tôi. Vì vậy, tôi đã kết thúc việc chuyển chúng sang git+https://...ký hiệu và sau đó chúng hoạt động hoàn hảo.
RayLuo

174

requirements.txtcho phép các cách sau để chỉ định một phụ thuộc vào gói trong kho git kể từ pip 7.0: 1

[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e git+git@git.myproject.org:SomeProject#egg=SomeProject

Đối với Github có nghĩa là bạn có thể làm (chú ý bỏ qua -e):

git+git://github.com/mozilla/elasticutils.git#egg=elasticutils

Tại sao câu trả lời thêm?
Tôi đã hơi bối rối bởi -elá cờ trong các câu trả lời khác vì vậy đây là sự làm rõ của tôi:

Các -ehoặc --editablephương tiện cờ rằng gói phần mềm được cài đặt trong <venv path>/src/SomeProjectvà do đó không có trong chôn sâu <venv path>/lib/pythonX.X/site-packages/SomeProjectnó nếu không sẽ được đặt trong. 2

Tài liệu


9
Nhưng lưu ý rằng nếu bạn bỏ qua -elần tiếp theo, bạn pip freezecó thể không đưa ra kết quả chính xác cho gói này
Maccesch

82

Đầu tiên, cài đặt với git+githoặc git+https, theo bất kỳ cách nào bạn biết. Ví dụ về cài đặt kronokchi nhánh của brabeiondự án:

pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion

Thứ hai, sử dụng pip freeze > requirements.txtđể có được điều đúng trong của bạn requirements.txt. Trong trường hợp này, bạn sẽ nhận được

-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master

Thứ ba, kiểm tra kết quả:

pip uninstall brabeion
pip install -r requirements.txt

4
Pip đóng băng vẫn liệt kê gói tôi sử dụng như một phiên bản đóng, trước. và không phải là kiểm tra github trực tiếp
Antoine Claval

4
Bạn cần sử dụng tùy chọn '-e' cho 'pip đóng băng' để tạo url
Janusz Skonieczny

2
pip 9.0.1:no such option: -e
sds

Ý bạn là git+httpssao? Trong văn bản bạn nói git+gitvà trong mãgit+https
Antony Hatchkins

@AntonyHatchkins đã sửa.
osa

17

Kể từ pip v1.5, (phát hành ngày 1 tháng 1 năm 2014: CHANGELOG , PR ), bạn cũng có thể chỉ định thư mục con của repo git để chứa mô-đun của mình. Cú pháp trông như thế này:

pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory

Lưu ý: Là tác giả mô-đun pip, lý tưởng nhất là bạn có thể muốn xuất bản mô-đun của mình trong repo cấp cao nhất nếu có thể. Tuy nhiên, tính năng này hữu ích cho một số repos có sẵn có chứa các mô-đun python trong thư mục con. Bạn có thể bị buộc phải cài đặt chúng theo cách này nếu chúng không được xuất bản thành pypi.


1

Tôi thấy rằng thật khó để có được pip3 (v9.0.1, như được cài đặt bởi trình quản lý gói của Ubuntu 18.04) để thực sự cài đặt thứ tôi bảo nó cài đặt. Tôi đang đăng câu trả lời này để tiết kiệm thời gian của bất kỳ ai gặp phải vấn đề này.

Đặt tệp này vào tệp tests.txt không thành công:

git+git://github.com/myname/myrepo.git@my-branch#egg=eggname

"Không thành công" Tôi có nghĩa là trong khi nó tải xuống mã từ Git, cuối cùng nó đã cài đặt phiên bản mã gốc, như được tìm thấy trên PyPi, thay vì mã trong repo trên nhánh đó.

Tuy nhiên, cài đặt commmit thay vì tên chi nhánh hoạt động:

git+git://github.com/myname/myrepo.git@d27d07c9e862feb939e56d0df19d5733ea7b4f4d#egg=eggname

Bạn có chắc rằng chi nhánh của bạn cũng ở xa?
Alfe

Nó không chỉ vào một bản sao địa phương, nếu đó là những gì bạn đang tự hỏi.
Vứt bỏ tài khoản
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.