Python setup.py mengembangkan vs menginstal

336

Dua opsi di setup.py developdan installmembingungkan saya. Menurut situs ini , menggunakan developmembuat tautan khusus ke direktori paket situs.

Orang-orang menyarankan agar saya menggunakan python setup.py installuntuk instalasi baru dan python setup.py developsetelah ada perubahan pada file setup.

Adakah yang bisa menjelaskan penggunaan perintah ini?

Netro
sumber

Jawaban:

468

python setup.py install digunakan untuk menginstal paket (biasanya pihak ketiga) yang Anda sendiri tidak akan kembangkan / ubah / debug

Untuk barang-barang Anda sendiri, Anda ingin menginstal paket Anda terlebih dahulu dan kemudian dapat sering mengedit kode tanpa harus menginstal ulang paket setiap kali - dan itulah yang python setup.py developdilakukan: itu menginstal paket (biasanya hanya folder sumber) dengan cara yang memungkinkan Anda mengedit kode dengan mudah setelah diinstal ke lingkungan (virtual), dan segera lakukan perubahan.

Perhatikan bahwa sangat disarankan untuk menggunakan pip install .(menginstal) dan pip install -e .(menginstal pengembang) untuk menginstal paket, karena memohon setup.pysecara langsung akan melakukan hal-hal yang salah untuk banyak dependensi, seperti menarik prerelease dan versi paket yang tidak kompatibel, atau membuat paket sulit untuk dihapus dengan pip.

Erik Kaplun
sumber
81
Erik benar. Yang juga berguna untuk diketahui adalah yang setup.py develophadir dengan --uninstallopsi kapan Anda selesai meretas.
philadams
5
Pemikiran terakhir di sini adalah bahwa opsi lain setup.py developketika meretas paket python adalah menggunakan modifikasi jalur "sederhana (tetapi eksplisit) untuk menyelesaikan paket dengan benar" ulang Kenneth Reitz
filad
4
Saya mengalami masalah menggunakan python setup.py developmencoba mengatur Ceilometer untuk pengembangan lokal. Saya akhirnya menggunakan pip install -e PATH(dalam virtualenv) untuk menghindari masalah yang muncul melaluieasy_install .
Joe D'Andrea
1
tidak yakin apakah ini penting, tetapi jika saya menggunakan python 3 dll, apakah kita harus menjalankannya secara python setup.py developberbeda?
Charlie Parker
1
Ini berfungsi dengan python3, tetapi jangan lupa untuk menghapus instalasi pip saat ini yang mungkin Anda miliki, karena mereka akan berbenturan bersama (itu terjadi pada saya saat ini).
Léo Germond
124

Dari dokumentasi . Tidak developakan menginstal paket tetapi itu akan membuat .egg-linkdalam direktori penempatan kembali ke direktori kode sumber proyek.

Jadi itu seperti menginstal tetapi alih-alih menyalin ke site-packagessana menambahkan tautan simbolik ( .egg-linkbertindak sebagai tautan simbolik multiplatform).

Dengan begitu Anda dapat mengedit kode sumber dan melihat perubahan secara langsung tanpa harus menginstal ulang setiap kali Anda membuat sedikit perubahan. Ini berguna ketika Anda adalah pengembang proyek itu maka nama develop. Jika Anda baru saja menginstal paket orang lain, Anda harus menggunakannyainstall

RubenLaguna
sumber
24

Hal lain yang bermanfaat bagi orang saat menggunakan developmetode ini adalah --useropsi untuk menginstal tanpa sudo. Ex:

python setup.py develop --user

dari pada

sudo python setup.py develop
Taylor
sumber
11
IIUC Anda seharusnya tidak pernah setup.py developdi sistem Anda, ini hanya masuk akal dalam virtualenv.
dividebyzero
2
@dividebyzero Maksud Anda harus selalu digunakan python setup.py develop --user, jika saya mengerti dengan benar? Selain itu, bisakah Anda memberi tahu saya di mana paket diinstal dengan menggunakan python setup.py develop --user? Terima kasih!
ROBOT AI
2
Saya pikir --userakan menginstal dalam direktori di akun rumah Anda, dan tidak akan mempengaruhi pengguna lain di sistem Anda. The developakan membuat link ke direktori source proyek Anda bukan benar-benar menyalin segala sesuatu. develop --userharus OK, dan developdalam virtualenv juga. Hanya developke sistem aktual yang aneh, karena Anda mungkin memiliki pengguna lain menggunakan sesuatu yang menunjuk ke proyek dalam salinan pribadi Anda dari kode sumber proyek.
dividebyzero
4
Namun banyak (kebanyakan?) Orang tidak menjalankan sistem multi-pengguna
patstew
1
@boatcoder, Mac, dan Linux (dan Windows) mungkin merupakan sistem yang mampu multi-pengguna , tetapi kemungkinan besar pengembang adalah satu-satunya akun pengguna (nyata) dari desktop-nya, dan saya percaya itulah yang dimaksud dengan warna baru.
MestreLion