Saya mencoba menginstal paket Python dari repositori GitHub pribadi. Untuk repositori publik, saya bisa mengeluarkan perintah berikut yang berfungsi dengan baik:
pip install git+git://github.com/django/django.git
Namun, jika saya mencoba ini untuk repositori pribadi:
pip install git+git://github.com/echweb/echweb-utils.git
Saya mendapatkan output berikut:
Downloading/unpacking git+git://github.com/echweb/echweb-utils.git
Cloning Git repository git://github.com/echweb/echweb-utils.git to /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build
Complete output from command /usr/local/bin/git clone git://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build:
fatal: The remote end hung up unexpectedly
Cloning into /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build...
----------------------------------------
Command /usr/local/bin/git clone git://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build failed with error code 128
Saya kira ini karena saya mencoba mengakses repositori pribadi tanpa memberikan otentikasi apa pun. Karena itu saya mencoba menggunakan Git + ssh
berharap pip akan menggunakan kunci publik SSH saya untuk mengotentikasi:
pip install git+ssh://github.com/echweb/echweb-utils.git
Ini menghasilkan output sebagai berikut:
Downloading/unpacking git+ssh://github.com/echweb/echweb-utils.git
Cloning Git repository ssh://github.com/echweb/echweb-utils.git to /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build
Complete output from command /usr/local/bin/git clone ssh://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build:
Cloning into /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
----------------------------------------
Command /usr/local/bin/git clone ssh://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build failed with error code 128
Apakah yang saya coba capai bahkan mungkin? Jika demikian, bagaimana saya bisa melakukannya?
eval $(ssh-agent); ssh-add ~/.ssh/github_id_rsa
dan kemudian jalankan instalasi pip berikut pip.pypa.io/en/stable/reference/pip_install/#gitJawaban:
Anda dapat menggunakan
git+ssh
skema URI, tetapi Anda harus menetapkan nama pengguna:Apakah Anda melihat
git@
bagian itu ke dalam URI?PS: Baca juga tentang kunci penyebaran .
PPS: Dalam instalasi saya, skema URI "git + ssh" hanya bekerja dengan persyaratan "yang dapat diedit":
Ingat : Ubah
:
karakter yanggit remote -v
dicetak ke/
karakter sebelum menggunakan alamat remote dalampip
perintah:Jika Anda lupa, Anda akan mendapatkan kesalahan ini:
sumber
git+ssh://[email protected]/echweb/echweb-utils.git
skema yang benar dalam file persyaratan saya. Saya membuka pertanyaan baru di sini: stackoverflow.com/questions/18883430/… . Bantuan apa pun akan bagus.git+ssh://[email protected]/echweb/echweb-utils.git
ke dalamrequirements.txt
karya juga, yang luar biasa.pip install git+ssh://[email protected]/echweb/echweb-utils.git@branch-name
Sebagai teknik tambahan, jika Anda memiliki repositori pribadi yang diklon secara lokal, Anda dapat melakukan:
Secara lebih modern, Anda bisa melakukan ini (dan surat
-e
wasiat berarti Anda tidak perlu melakukan perubahan sebelum tercermin):sumber
Anda dapat melakukannya langsung dengan URL HTTPS seperti ini:
Ini juga berfungsi hanya menambahkan baris itu di requirement.txt dalam proyek Django , misalnya.
sumber
Ini juga berfungsi dengan Bitbucket :
Pip akan menggunakan kunci SSH Anda dalam hal ini.
sumber
Sintaks untuk file persyaratan diberikan di sini:
https://pip.pypa.io/en/latest/reference/pip_install.html#requirements-file-format
Jadi misalnya, gunakan:
jika Anda ingin sumbernya bertahan setelah instalasi.
Atau hanya
jika Anda hanya ingin menginstalnya.
sumber
Saya merasa lebih mudah menggunakan token daripada kunci SSH. Saya tidak dapat menemukan dokumentasi yang bagus tentang ini, jadi saya menemukan solusi ini terutama melalui coba-coba. Selanjutnya, menginstal dari pip dan setuptools memiliki beberapa perbedaan yang halus; tetapi cara ini harus bekerja untuk keduanya.
GitHub tidak (saat ini, per Agustus 2016) menawarkan cara mudah untuk mendapatkan zip / tarball dari repositori pribadi. Jadi, Anda perlu mengarahkan setuptools untuk memberi tahu setuptools bahwa Anda menunjuk ke repositori Git:
Beberapa catatan di sini:
0
) di akhir tautan, meskipun tidak ada paket di PyPI . Ini harus berupa angka aktual, bukan kata.git+
memberi tahu setuptools itu untuk mengkloning repositori, daripada menunjuk ke zip / tarballversion
bisa berupa cabang, tag, atau hash komit--process-dependency-links
jika menginstal dari pipsumber
setup.py
tidak boleh mengandung dependensi konkret, hanya yang abstrak. Ini menentukan ketergantungan konkret padasetup.py
.Saya menemukan cara untuk secara otomatis 'menginstal' repositori pribadi GitLab yang tidak memerlukan prompt kata sandi. Pendekatan ini menggunakan GitLab "Menyebarkan Kunci" dan file konfigurasi SSH, sehingga Anda dapat menggunakan menggunakan kunci selain kunci SSH pribadi Anda (dalam kasus saya, untuk digunakan oleh bot '). Mungkin seseorang yang baik hati dapat memverifikasi menggunakan GitHub.
Buat kunci SSH Baru:
File akan muncul sebagai
~/.ssh/GitLab_Robot_Deploy_Key
dan~/.ssh/GitLab_Robot_Deploy_Key.pub
.Salin dan tempel konten dari
~/.ssh/GitLab_Robot_Deploy_Key.pub
file ke dalam dialog "Deploy Keys" GitLab.Uji Kunci Penyebaran Baru
Perintah berikut memberi tahu SSH untuk menggunakan kunci penyebaran baru Anda untuk mengatur koneksi. Jika berhasil, Anda harus mendapatkan pesan: "Selamat datang di GitLab, UserName!"
Buat File Konfigurasi SSH
Selanjutnya, gunakan editor untuk membuat
~/.ssh/config
file. Tambahkan konten berikut. Nilai 'Host' dapat berupa apa saja yang Anda inginkan (ingat saja, karena Anda akan menggunakannya nanti). HostName adalah URL ke instance GitLab Anda. IdentifyFile adalah jalur ke file kunci SSH yang Anda buat pada langkah pertama.Arahkan SSH ke file Konfigurasi
oxyum memberi kami resep untuk menggunakan pip dengan SSH:
Kami hanya perlu memodifikasinya sedikit agar SSH menggunakan Kunci Penyebaran baru kami. Kami melakukannya dengan mengarahkan SSH ke entri Host di file konfigurasi SSH. Cukup ganti 'gitlab.mycorp.com' pada perintah ke nama host yang kami gunakan dalam file konfigurasi SSH:
Paket sekarang harus menginstal tanpa prompt kata sandi.
Referensi A
Referensi B
sumber
Ketika saya menginstal dari GitHub saya dapat menggunakan:
Tapi, karena saya harus menjalankan pip as
sudo
, kunci SSH tidak lagi bekerja dengan GitHub, dan "git clone" gagal pada "Izin ditolak (publickey)". Menggunakangit+https
memungkinkan saya untuk menjalankan perintah sebagai sudo, dan meminta GitHub meminta pengguna / kata sandi saya.sumber
Anda juga dapat menginstal dependensi repositori pribadi melalui git + https: //github.com / ... URL dengan memberikan kredensial masuk (login dan kata sandi, atau menggunakan token) untuk digulung dengan
.netrc
file:sumber
Jika Anda ingin menginstal dependensi dari file persyaratan dalam server CI atau yang serupa, Anda dapat melakukan ini:
Dalam kasus saya, saya menggunakan
GIT_USER=gitlab-ci-token
danGIT_PASS=${CI_JOB_TOKEN}
.Metode ini memiliki keunggulan yang jelas. Anda memiliki file persyaratan tunggal yang berisi semua dependensi Anda.
sumber
Jika Anda tidak ingin menggunakan SSH, Anda bisa menambahkan nama pengguna dan kata sandi di URL HTTPS.
Kode di bawah ini mengasumsikan bahwa Anda memiliki file bernama "pass" di direktori kerja yang berisi kata sandi Anda.
sumber
solusi oxyum tidak masalah untuk jawaban ini. Saya hanya ingin menunjukkan bahwa Anda perlu berhati-hati jika Anda menginstal menggunakan
sudo
karena kunci juga harus disimpan untuk root (misalnya,/root/.ssh
).Maka Anda bisa mengetik
sumber
--user
bendera atau virtualenv.Jika Anda memiliki pustaka / paket Anda sendiri di GitHub, GitLab, dll., Anda harus menambahkan tag untuk melakukan dengan versi konkret pustaka, misalnya, v2.0, dan kemudian Anda dapat menginstal paket Anda:
Ini bekerja untuk saya. Solusi lain tidak berhasil untuk saya.
sumber
Inilah metode cepat yang bekerja untuk saya. Cukup garpu repo dan instal dari akun GitHub Anda sendiri
sumber
Cukup salin remote dari
git clone
perintah asli (atau darigit remote -v
). Anda akan mendapatkan sesuatu seperti ini:Bitbucket:
git+ssh://[email protected]:your_account/my_pro.git
GitHub:
git+ssh://[email protected]:your_account/my_pro.git
Selanjutnya, Anda perlu mengganti
:
dengan di/
sebelah nama domain.Jadi instal menggunakan:
sumber
Anda boleh mencoba
tanpa
ssh:...
. Itu bekerja untuk saya.sumber