Saya tahu tentang virtualenv dan pip. Tetapi ini sedikit berbeda dari bundler / karton.
Misalnya:
- pip menulis jalur absolut ke shebang atau mengaktifkan skrip
- pip tidak memiliki
exec
sub perintah (bundle exec bar
) - virtualenv menyalin interpreter Python ke direktori lokal
Apakah setiap pengembang Python menggunakan virtualenv / pip? Apakah ada alat manajemen paket lain untuk Python?
pipenv
danshovel
disebutkan di bawah ini adalah pilihan yang lebih modern sejak pertanyaan ini diajukan.Jawaban:
Dari apa yang saya baca tentang bundler - pip tanpa virtualenv seharusnya berfungsi dengan baik untuk Anda. Anda dapat menganggapnya sebagai sesuatu antara perintah gem biasa dan bundler. Hal umum yang dapat Anda lakukan dengan pip:
Menginstal paket (gem install)
Dependensi dan pemasangan massal (gemfile)
Mungkin cara termudah adalah dengan menggunakan file requirement.txt pip. Pada dasarnya ini hanya daftar paket yang diperlukan dengan kemungkinan batasan versi. Ini mungkin terlihat seperti:
Nanti ketika Anda ingin menginstal dependensi tersebut, Anda akan melakukan:
Cara sederhana untuk melihat semua paket Anda saat ini dalam sintaks file persyaratan adalah dengan melakukan:
Anda dapat membaca lebih lanjut di sini .
Eksekusi (eksekutif bundler)
Semua paket python yang disertakan dengan file yang dapat dieksekusi biasanya langsung tersedia setelah instalasi (kecuali Anda memiliki pengaturan khusus atau itu adalah paket khusus). Sebagai contoh:
Paket permata untuk dipasang dari cache (paket bundler)
Ada
pip bundle
danpip zip/unzip
. Tapi saya tidak yakin jika banyak orang yang menggunakannya.ps Jika Anda peduli dengan isolasi lingkungan, Anda juga dapat menggunakan virtualenv bersama dengan pip (mereka adalah teman dekat dan bekerja sama dengan sempurna). Secara default pip menginstal paket di seluruh sistem yang mungkin memerlukan hak admin.
sumber
bundle install --path vendor
menginstal semuanya secara lokal danbundle exec
cukup pintar untuk mengetahuinya. Tidak perlu perubahan lingkungan eksplisit.bundle exec
. Intinyabundle exec
adalah itu mengubah lingkungan sepertiGemfile
sebelum menjalankan eksekusi. Pip tidak memiliki padanan denganbundle exec
, meskipun virtualenv mungkin.Gemfile
di akarnya, dan Anda bisabundle install
dan Anda siap melakukannya, ataubundle --deployment
dan itu ' Hanya akan berjalan di server dengan sedikit hal lain yang harus dilakukan asalkan mesin memiliki versi ruby yang diperlukan di dalamnya. Python tidak memiliki padanan. Alatnya ada di sana, budaya di mana-mana tidak.Anda dapat menggunakan pipenv , yang memiliki antarmuka yang mirip dengan bundler.
Pipenv membuat virtualenv secara otomatis dan menginstal dependensi dari
Pipfile
atauPipfile.lock
.Anda dapat menjalankan perintah dengan lingkup virtualenv seperti
bundle exec
.sumber
Ada pbundler tiruan .
Versi yang saat ini ada di pip hanya membaca
requirements.txt
file yang sudah Anda miliki, tetapi sudah ketinggalan zaman. Ini juga tidak sepenuhnya setara: itu bersikeras membuatvirtualenv
. Bundler, saya perhatikan, hanya menginstal paket apa yang hilang, dan memberi Anda opsi untuk memberikan kata sandi sudo Anda untuk menginstal ke direktori sistem Anda atau memulai ulang, yang tampaknya bukan fitur pbundler.Namun, versi pada git adalah penulisan ulang yang hampir lengkap agar lebih mirip dengan perilaku Bundler ... termasuk memiliki "Cheesefile" dan sekarang tidak mendukung requirement.txt. Ini sangat disayangkan, karena requirement.txt adalah standar de facto di pythonland, dan bahkan ada pekerjaan yang dicap BDFL Resmi untuk menstandarkannya . Ketika hal itu mulai berlaku, Anda dapat yakin bahwa sesuatu seperti pbundler akan menjadi standar de facto. Sayangnya, belum ada yang cukup stabil yang saya tahu (tapi saya ingin sekali terbukti salah).
sumber
Saya menulis satu - https://github.com/Deepwalker/pundler . Di PIP
pundle
namanya sudah ada yang pakai.Ini menggunakan
requirements(_\w+)?.txt
file sebagai dependensi yang Anda inginkan dan membuatfrozen(_\w+)?.txt
file dengan versi beku.Tentang
(_\w+)?
hal - ini adalah envs. Anda dapat membuat persyaratan_test.txt dan kemudian menggunakanPUNDLEENV=test
untuk menggunakan deps ini dalam proses Anda dengan persyaratan.txt di sampingnya.Dan tentang virtualenv - Anda tidak perlu satu, itu yang diambil pundle dari bundler di kepala pertama.
sumber
Python Poetry adalah yang paling dekat dengan bundler Ruby pada tahun 2020 (dan sudah sejak 2018). Umurnya sudah lebih dari dua tahun, masih sangat aktif, memiliki dokumentasi yang bagus. Orang mungkin mengeluh tentang
curl-pipe-python
-gaya adalah cara penginstalan yang disarankan, tetapi ada alternatif lain, misalnya homebrew di macOS.Ia menggunakan virtualenv di belakang layar (berbeda dengan bundler), tetapi ia menyediakan dan menggunakan file-kunci, menangani sub-dependensi, mematuhi batasan versi yang ditentukan dan memungkinkan secara otomatis memperbarui paket yang sudah ketinggalan zaman. Bahkan ada pelengkapan otomatis untuk shell favorit Anda.
Dengan penggunaan file pyproject.toml, ini juga berjalan sedikit lebih jauh dari bundler (lebih dekat ke gemspec. Ini juga sebanding dengan JavaScript dan npm dan benang TypeScript).
Poetrify (proyek pelengkap) membantu mengubah proyek dari requirement.txt menjadi pyproject.toml untuk Puisi.
File kunci dapat diekspor ke requirement.txt oleh
poetry export -f requirements.txt > requirements.txt
, jika Anda membutuhkannya untuk perkakas lain (atau kasus yang tidak biasa ingin kembali).sumber
Menurutku sekop layak untuk dilihat. Ini dikembangkan secara khusus untuk Rake versi Python. Tidak ada banyak aktivitas commit pada proyek ini, tetapi tampaknya stabil dan berguna.
sumber
Tidak, tidak semua pengembang menggunakan virtualenv dan / atau pip, tetapi banyak pengembang menggunakan / lebih suka alat ini
Dan sekarang, untuk alat pengembangan paket dan lingkungan yang berbeda itulah pertanyaan Anda yang sebenarnya. Gunakan alat lain seperti Buildout ( http://www.buildout.org/en/latest/ ) untuk tujuan yang sama, pisahkan sistem build Python lingkungan Anda untuk setiap proyek yang Anda kelola. Untuk beberapa waktu saya menggunakan ini, tetapi tidak sekarang.
Lingkungan independen per proyek, dengan Python sedikit berbeda dari situasi yang sama di Ruby. Dalam kasus saya, saya menggunakan pyenv ( https://github.com/yyuu/pyenv ) itu seperti rbenv tetapi, untuk Python. versi berbeda dari python dan virtualenvs per proyek, dan, dalam lingkungan yang terisolasi ini, saya dapat menggunakan pip atau instalasi mudah (jika diperlukan).
sumber