Bagaimana menyatakan di requirement.txt sumber github langsung


448

Saya telah menginstal perpustakaan menggunakan perintah

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

yang menginstalnya langsung dari repositori Github. Ini berfungsi dengan baik dan saya ingin memiliki ketergantungan itu pada saya requirements.txt. Saya telah melihat tiket lain seperti ini tetapi itu tidak menyelesaikan masalah saya. Jika saya meletakkan sesuatu seperti

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

dalam requirements.txtfile, pip install -r requirements.txthasil dalam output berikut:

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))

The dokumentasi file persyaratan tidak menyebutkan link menggunakan git+gitspecifier protokol, jadi mungkin ini tidak didukung.

Adakah yang punya solusi untuk masalah saya?

Jawaban:


327

Sintaks paket "Editable" dapat digunakan requirements.txtuntuk mengimpor paket dari berbagai VCS (git, hg, bzr, svn) :

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

Juga, dimungkinkan untuk menunjuk ke komit tertentu:

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

3
Saya tidak berhasil checkout secara lokal versi yang dapat diedit (karena masalah sintaks, mungkin) dan akhirnya menggunakan git+gitvarian (yang berfungsi). Dalam requirements.txtversi Anda bekerja, jadi terima kasih banyak :)
Alfe

1
The docsLink tidak bekerja untuk saya; Saya sudah menggunakan yang lebih tua .
Osa

42
Apa yang saya tidak mengerti adalah bahwa sintaks yang ditunjukkan adalah persis apa yang ada dalam persyaratan, yaitu tidak ada nama paket sebelum -e.
bijak

5
Menambahkan "-e" tidak perlu tergantung pada apakah Anda ingin paket berada dalam mode yang dapat diedit, lihat jawaban oleh @qff.
Langit

17
Bukankah seharusnya -e git+git://bukan -e git://? Saya mendapat pesan "harus berupa jalur ke proyek lokal atau url VCS yang dimulai dengan svn +, git +, hg +, atau bzr +" pesan kesalahan.
Bruce Wayne

424

Biasanya requirements.txtfile Anda akan terlihat seperti ini:

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

Untuk menentukan repo Github, Anda tidak perlu package-name==konvensi.

Contoh di bawah ini memperbarui package-twomenggunakan repo GitHub. Teks di antara @dan #menunjukkan spesifikasi paket.

Tentukan komitmen hash ( 41b95ecdalam konteks yang diperbarui requirements.txt):

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

Tentukan nama cabang ( master):

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

Tentukan tag ( 0.1):

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

Tentukan rilis ( 3.7.1):

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

Catatan yang #egg=package-twobukan komentar di sini, itu adalah untuk secara eksplisit menyatakan nama paket

Posting blog ini memiliki lebih banyak diskusi tentang topik tersebut.


54
Dari semua jawaban lain, saya tidak percaya sama sekali dari mereka yang hanya menunjukkan file persyaratan dengan campuran req "normal" dengan git yang dilemparkan untuk perbandingan. Saya sangat terlempar oleh apa yang tampak seperti -eopsi command-line ( ). Terima kasih telah menunjukkan perpaduan keduanya sehingga saya dapat menempatkan ini dalam konteks!
Hendy

Menunjuk ke rilis 3.7.1dengan git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-twotidak berhasil untuk saya. Apa yang berhasil untuk saya adalahgit+git://github.com/path/to/package-two@3.7.1#egg=package-two .
Jean Paul

Jawaban ini sangat membantu. Satu hal. git+git://...Notasi - notasi itu entah bagaimana menyebabkan kesalahan ssh-relatif pada kotak Linux saya. Jadi saya akhirnya beralih ke git+https://...notasi dan kemudian mereka bekerja dengan sempurna.
RayLuo

174

requirements.txtmemungkinkan cara-cara berikut untuk menentukan ketergantungan pada sebuah paket di repositori git pada 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

Untuk Github, itu artinya Anda dapat melakukan (perhatikan yang dihilangkan -e):

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

Mengapa ada jawaban ekstra?
Saya agak bingung dengan -ebendera di jawaban lain jadi inilah klarifikasi saya:

The -eatau --editablebendera berarti bahwa paket tersebut dipasang di <venv path>/src/SomeProjectdan dengan demikian tidak dalam terkubur <venv path>/lib/pythonX.X/site-packages/SomeProjectitu lain akan ditempatkan di. 2

Dokumentasi


9
Tetapi perhatikan bahwa jika Anda menghilangkan yang -eberikutnya pip freezemungkin tidak memberikan hasil yang benar untuk paket ini
Maccesch

82

Pertama, instal dengan git+gitatau git+https, dengan cara apa pun yang Anda tahu. Contoh menginstal kronokcabang brabeionproyek:

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

Kedua, gunakan pip freeze > requirements.txtuntuk mendapatkan hal yang benar di blog Anda requirements.txt. Dalam hal ini, Anda akan mendapatkannya

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

Ketiga, uji hasilnya:

pip uninstall brabeion
pip install -r requirements.txt

4
pip freeze masih daftar paket yang saya gunakan sebagai versi tertutup, anterior. dan bukan checkout github langsung
Antoine Claval

4
Anda perlu menggunakan opsi `-e 'untuk' pip freeze 'untuk menghasilkan url
Janusz Skonieczny

2
pip 9.0.1:no such option: -e
sds

Maksudmu git+https? Dalam teks yang Anda katakan git+gitdan dalam kodegit+https
Antony Hatchkins

@AntonyHatchkins diperbaiki.
Osa

17

Sejak pip v1.5, (dirilis 1 Januari 2014: CHANGELOG , PR ) Anda juga dapat menentukan subdirektori dari git repo yang berisi modul Anda. Sintaksnya terlihat seperti ini:

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

Catatan: Sebagai pembuat modul pip, idealnya Anda mungkin ingin menerbitkan modul Anda di repo tingkat atas sendiri jika Anda bisa. Namun fitur ini bermanfaat untuk beberapa repo yang sudah ada sebelumnya yang berisi modul python di subdirektori. Anda mungkin terpaksa menginstalnya dengan cara ini jika mereka tidak dipublikasikan ke pypi juga.


1

Saya menemukan itu agak sulit untuk mendapatkan pip3 (v9.0.1, sebagaimana diinstal oleh manajer paket Ubuntu 18.04) untuk benar-benar menginstal hal yang saya katakan untuk diinstal. Saya memposting jawaban ini untuk menghemat waktu siapa pun yang mengalami masalah ini.

Gagal memasukkan ini ke dalam file requirement.txt:

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

Maksud "gagal" yang saya maksud adalah ketika mengunduh kode dari Git, akhirnya menginstal versi asli dari kode tersebut, seperti yang ditemukan di PyPi, alih-alih kode dalam repo di cabang itu.

Namun, menginstal commit bukannya nama cabang berfungsi:

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

Apakah Anda yakin cabang Anda juga jauh?
Alfe

Itu tidak menunjuk ke salinan lokal, jika itu yang Anda ingin tahu.
Membuang Akun
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.