Bagaimana seharusnya tautan dependensi pribadi ditangani di setup.py

10

Di tempat kerja kami menggunakan server pypi pribadi. Server pypi ini ditetapkan sebagai tautan ketergantungan:

...
from setuptools import setup

config = ConfigParser.ConfigParser()
rc = os.path.join(os.path.expanduser('~'), '.pypirc')
config.read(rc)
dependency_links = [
    'https://{}:{}@<private_url>'.format(
        config.get('dc', 'username'), config.get('dc', 'password'))]

setup(
    dependency_links=dependency_links,
    ...)

Ini berfungsi dengan baik di sebagian besar kasus kami. Namun, beberapa waktu lalu kami harus menginstal paket pada server klien. Untuk ini kami harus menyalin yang valid .pypircsebelum kami dapat menginstal paket apa pun.

Juga kode di atas hanya terasa seperti hack kotor.

Apa cara yang tepat untuk menentukan tautan dependensi aman tanpa kredensial hardcoding?

Remco Haszing
sumber
1
Saya mengerti apa yang kamu maksud. Ini bukan yang kotor hack, tapi itu berarti Anda kopling otentikasi dengan manajemen ketergantungan pada basis per-paket. Pendekatan ini tidak portabel atau dapat diskalakan.
Joel Cornett

Jawaban:

1

Ini sepertinya hack yang masuk akal dan tidak kotor sama sekali.

  1. Ada file konfigurasi untuk kredensial
  2. Ada cara untuk menyuntikkan URL khusus + kredit ke dalam dependensi

Pekerjaan sedang dilakukan dan dilakukan dengan baik, satu-satunya cara untuk membuat ini lebih baik adalah mendokumentasikannya dan mencobanya di beberapa pengaturan berbeda atau dengan beberapa server pypi dan mengatasi masalah yang muncul dari itu.

Rudolf Olah
sumber
0

Satu kemungkinan adalah pengaturan Variabel Lingkungan . Ini bisa dilakukan dengan alat penyebaran seperti Ansible . Menyimpan rahasia Anda dengan Stack Overflow's Blackbox atau Ansible's Vault

Atau: Containerisasi akan membantu, karena semua yang diperlukan untuk menjalankan perangkat lunak sudah terpasang.

Thomas Junk
sumber
0

Berhati-hatilah saat menggunakan solusi ini. Sebagaimana dinyatakan dalam dokumentasi :

Mereka juga akan ditulis ke dalam metadata telur untuk digunakan oleh alat-alat seperti EasyInstall untuk digunakan ketika menginstal file .egg.

Yaitu, kredensial Anda akan didistribusikan di .egg. Dengan rooting melalui setuptoolskode sumber, saya menemukan bahwa secara internal tampaknya menggunakan easy_installperintah untuk menginstal dependensi. Karena itu, tambahkan berikut ini ke setup.cfgpenyebab Anda untuk mengambil repo pribadi:

[easy_install]
index_url=https://username:password@your.repo/simple

Ini masih memiliki snafu yang kredensial Anda bisa cetak ke terminal ketika menginstalnya, tetapi setidaknya mereka tidak berakhir dalam distribusi Anda. Perhatikan bahwa solusi ini menggantikan URL indeks Anda, jadi repo pribadi Anda juga harus mencerminkan yang publik. Saya tidak melihat dukungan untuk menambahkan URL indeks dengan cara yang jelas.

Scranen
sumber