Konfigurasi agar instalasi pip dapat bekerja dari github

226

Kami ingin menggunakan pip dengan github untuk menginstal paket pribadi ke server produksi kami. Pertanyaan ini menyangkut apa yang perlu di repo github agar instalasi dapat berhasil.

Dengan asumsi baris perintah berikut (yang mengautentikasi baik-baik saja dan mencoba menginstal):

pip install git+ssh://git@github.com/BlahCo/search/tree/prod_release_branch/ProductName

Apa yang perlu berada di ProductName? Apakah ini isi dari apa yang biasanya ada di file tar setelah menjalankan setup.py dengan opsi sdist, atau apakah file tar.gz yang sebenarnya, atau yang lainnya?

Saya bertanya di sini karena saya sudah mencoba beberapa variasi dan tidak dapat membuatnya berfungsi. Setiap bantuan dihargai.

ccgillett
sumber

Jawaban:

290

Anda memerlukan paket python keseluruhan, dengan setup.pyfile di dalamnya.

Paket yang dinamai fooadalah:

foo # the installable package
├── foo
   ├── __init__.py
   └── bar.py
└── setup.py

Dan instal dari github seperti:

$ pip install git+https://github.com/myuser/foo.git@v123
or
$ pip install git+https://github.com/myuser/foo.git@newbranch

Info lebih lanjut di https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

Hugo Tavares
sumber
3
Di atas berfungsi, terima kasih banyak. Tetapi bagaimana jika saya memiliki rilis di subdir dalam repo, jadi daripada foo.git saya mencari foo / rilis / ProductVer. Apakah itu mungkin dan jika demikian bagaimana? Terima kasih banyak atas bantuannya!
ccgillett
4
Tidak, itu tidak mungkin. pip hanya menginstal dari direktori repositori root, setidaknya untuk git. Tidak tahu bagaimana perilaku subversi ...
Hugo Tavares
3
Jika Anda ingin melakukan ini di ssh dan repo pribadi, ini adalah posting tentang bagaimana melakukan itu
Jonathan
Mengapa Anda tidak meneruskan -eopsi (mode yang dapat diedit) ke pip?
Amelio Vazquez-Reina
14
Berikut skema url baru: pip install git+https://github.com/pypa/pip.git Sumber: pip Github repo
aboutaaron
111

Saya memiliki masalah serupa ketika saya harus menginstal dari repo github, tetapi tidak ingin menginstal git, dll.

Cara sederhana untuk melakukannya adalah menggunakan arsip zip paket. Tambahkan /zipball/masterke URL repo:

    $ pip install https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Downloading/unpacking https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
  Downloading master
  Running setup.py egg_info for package from https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Installing collected packages: django-debug-toolbar-mongo
  Running setup.py install for django-debug-toolbar-mongo
Successfully installed django-debug-toolbar-mongo
Cleaning up...

Dengan cara ini Anda akan membuat pip bekerja dengan repositori sumber github.

Dmitry
sumber
2
Ini adalah satu-satunya jawaban yang juga berfungsi di bawah Windows
divenex
Bagaimana ini bisa dilakukan dengan repositori pribadi? (seperti yang ditanyakan)
Rodrigo E. Principe
29

Jika Anda ingin menggunakan requirements.txtfile, Anda perlu gitdan sesuatu seperti entri di bawah ini untuk mengambil cabang master secara anonim di requirements.txt.

Untuk pemasangan rutin:

git+git://github.com/celery/django-celery.git

Untuk pemasangan "yang dapat diedit ":

-e git://github.com/celery/django-celery.git#egg=django-celery

Mode yang dapat diedit mengunduh kode sumber proyek ke ./srcdalam direktori saat ini. Hal ini memungkinkan pip freezeuntuk menampilkan lokasi github yang benar dari paket.

wieczorek1990
sumber
3
dari mana nama telur itu berasal? gagal memuat paket dalam Django setelah mengganti paket pip dengan github repo
holms
@holms Nama pencarian di setup.py
wieczorek1990
Apa #egg=django-celery? Apakah itu pengganti?
enchance
@ uang tunai Ini nama paket.
wieczorek1990
13

Mengkloning target repositori dengan cara yang sama seperti Anda mengkloning proyek lain:

git clone git@github.com:myuser/foo.git

Kemudian instal dalam mode pengembangan:

cd foo
pip install -e .

Anda dapat mengubah apa pun yang Anda inginkan dan setiap kode menggunakan foopaket akan menggunakan kode yang dimodifikasi.

Ada 2 manfaat dari solusi ini:

  1. Anda dapat menginstal paket di direktori proyek rumah Anda.
  2. Paket termasuk .gitdir, jadi itu adalah repositori Git biasa. Anda dapat mendorong ke garpu Anda segera.
longsoran
sumber
2
Saya bisa bersaksi bahwa solusi ini ajaib. Dalam kasus saya, saya ingin meretas pip, jadi saya kloningpip repositori, membuat virtualenv, mengaktifkannya, dan melakukannya pip install -e .. Kemudian pipdi virtualenv berada dalam mode pengembangan! Saya terkesan bahwa ini bekerja bahkan dengan manajer paket itu sendiri.
Radon Rosborough
Ini bagus! Saya perhatikan bahwa ketika saya menginstal menggunakan metode ini dan kemudian menjalankan pip list, paket tersebut memiliki referensi ke cabang Git dan path absolut dari mana ia diinstal. Apakah itu menyimpan referensi untuk itu atau dapatkah sumber dihapus?
Ahli Psikis
0

Anda dapat mencoba cara ini di Colab

!git clone https://github.com/UKPLab/sentence-transformers.git
!pip install -e /content/sentence-transformers
import sentence_transformers
Shaina Raza
sumber