Pip: Dukungan URL langsung PEP 508 dan menginstal sub-dependensi dari Git

Dibuat pada 3 Jul 2018  ·  3Komentar  ·  Sumber: pypa/pip

  • Versi pip: 10.0.1
  • Versi Python: 3.7.0
  • Sistem operasi: macOS

Saya telah menghabiskan sepanjang hari membaca tentang menginstal sub-dependensi dari git dan saya masih berjuang untuk menemukan solusi yang tepat.

Kasus penggunaan saya

Saya memotong pustaka Python yang ada (tersedia di PyPi), menambahkan beberapa perubahan yang tidak mungkin digabungkan ke hulu.
Beberapa proyek saya bergantung pada garpu perpustakaan. Sebelumnya itu adalah sebuah aplikasi, dan saya menggunakan Pipenv untuk mengelola dependensi aplikasi, di mana saya dapat dengan mudah menentukan untuk menginstal cabang/komit tertentu dari Git di Pipfile. Aplikasi saya berkembang dan sekarang saya mengubahnya menjadi perpustakaan (tidak akan dipublikasikan di PyPi). Saya perlu menyelesaikan masalah sub-dependensi dari Git untuk perpustakaan.
Saya telah membaca setidaknya masalah berikut: #3610, #4187, #2124, #5384 dan banyak lainnya dan tentu saja PEP. Ketika saya selesai membaca saya bahkan lebih bingung daripada ketika saya mulai.

Dari apa yang saya pahami dengan implementasi PEP-508 di pip 10, saya harus dapat menggunakan:

setup(
    name='dmfigol',
...
    install_requires=[
        "requests",
        'smartsheet-python-sdk @ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3',
    ],
)

Tapi itu tidak berhasil:

-> % pip install git+https://<private-git>/dmfigol/my-test-project.git
Collecting git+https://<private-git>/dmfigol/my-test-project.git
  ...
Direct url requirement (like smartsheet-python-sdk@ git+ssh://[email protected]/dmfigol/smartsheet-python-sdk@dev#egg=smartsheet-python-sdk-1.3.3) are not allowed for dependencies

Pertanyaan saya:
1) Apakah saya melakukan sesuatu yang salah atau ini tidak didukung?
2) Jika tidak didukung, apakah akan didukung?
3) Apakah saya memahami dengan benar bahwa saya juga dapat menggunakan sintaks serupa di pyproject.toml jika saya ingin bermigrasi dari setup.py ke sesuatu yang lebih deklaratif?
4) Apakah satu-satunya solusi yang tersedia saat ini untuk menggunakan bagian --process-dependency-links dan dependency_links di setup.py ?
5) Apa yang terjadi ketika upstream memperbarui perpustakaan di PyPi ke 1.3.4 atau lebih tinggi, dan saya masih ingin menggunakan versi bercabang 1.3.3?

Terima kasih

UPD: solusi yang saat ini berfungsi hingga #4187 diterapkan jika Anda menemukan utas ini:

setup(
    ...
    install_requires=[
        "smartsheet-python-sdk==10.1.3.3",
    ],
    dependency_links=[
        'https://github.com/dmfigol/smartsheet-python-sdk/archive/no-setuptools-scm.zip#egg=smartsheet-python-sdk-10.1.3.3'
    ],
...
auto-locked support

Komentar yang paling membantu

Apakah saya melakukan sesuatu yang salah atau ini tidak didukung?

Persyaratan URL PEP 508 sebagai dependensi tidak didukung.

Jika tidak didukung, apakah akan didukung?

Ya. Lihat di bawah.

Apakah saya mengerti dengan benar bahwa saya juga dapat menggunakan sintaks serupa di pyproject.toml jika saya ingin bermigrasi dari setup.py ke sesuatu yang lebih deklaratif?

pyproject.toml hanya berfungsi sebagai tempat untuk menentukan dependensi waktu pembuatan dan memiliki konfigurasi untuk alat. Apa pun selain itu diterapkan oleh alat yang Anda gunakan.

Apakah satu-satunya solusi yang tersedia saat ini untuk menggunakan --process-dependency-links dan bagian dependency_links di setup.py?

Ya. Itulah seluruh motivasi di balik #4187.


Kami menonaktifkan kemampuan untuk menggunakan persyaratan URL PEP 508 dalam dependensi, karena kami tidak ingin paket yang diinstal dari PyPI mengakibatkan pip menjangkau URL web arbitrer. Pada dasarnya, pip install spam seharusnya tidak membuat pip menjangkau apa pun kecuali PyPI.

Solusi yang diusulkan saat ini di #4187 adalah dengan hanya memodifikasi kondisi pemblokiran sehingga hanya memblokir dependensi URL ketika sebuah paket benar-benar diinstal dari PyPI secara langsung, sehingga mode penginstalan lainnya dapat menggunakan dependensi URL PEP 508.

Semua 3 komentar

Apakah saya melakukan sesuatu yang salah atau ini tidak didukung?

Persyaratan URL PEP 508 sebagai dependensi tidak didukung.

Jika tidak didukung, apakah akan didukung?

Ya. Lihat di bawah.

Apakah saya mengerti dengan benar bahwa saya juga dapat menggunakan sintaks serupa di pyproject.toml jika saya ingin bermigrasi dari setup.py ke sesuatu yang lebih deklaratif?

pyproject.toml hanya berfungsi sebagai tempat untuk menentukan dependensi waktu pembuatan dan memiliki konfigurasi untuk alat. Apa pun selain itu diterapkan oleh alat yang Anda gunakan.

Apakah satu-satunya solusi yang tersedia saat ini untuk menggunakan --process-dependency-links dan bagian dependency_links di setup.py?

Ya. Itulah seluruh motivasi di balik #4187.


Kami menonaktifkan kemampuan untuk menggunakan persyaratan URL PEP 508 dalam dependensi, karena kami tidak ingin paket yang diinstal dari PyPI mengakibatkan pip menjangkau URL web arbitrer. Pada dasarnya, pip install spam seharusnya tidak membuat pip menjangkau apa pun kecuali PyPI.

Solusi yang diusulkan saat ini di #4187 adalah dengan hanya memodifikasi kondisi pemblokiran sehingga hanya memblokir dependensi URL ketika sebuah paket benar-benar diinstal dari PyPI secara langsung, sehingga mode penginstalan lainnya dapat menggunakan dependensi URL PEP 508.

Terima kasih atas penjelasan terperinci, saya sangat menghargai bantuan Anda.

Utas ini telah dikunci secara otomatis karena tidak ada aktivitas terbaru setelah ditutup. Silakan buka edisi baru untuk bug terkait.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat