Sunting: berdasarkan komentar Ulf Rompe, penting untuk Anda menggunakan "1" daripada "0" , jika tidak, Anda akan merusak sys.path .
Saya telah melakukan python untuk beberapa waktu sekarang (lebih dari satu tahun), dan saya selalu bingung mengapa orang merekomendasikan Anda menggunakan sys.path.append()
bukan sys.path.insert()
. Biar saya tunjukkan.
Katakanlah saya sedang mengerjakan modul bernama PyWorkbooks (yang diinstal di komputer saya), tetapi saya secara bersamaan mengerjakan modul yang berbeda (katakanlah PyJob) yang menggabungkan PyWorkbooks. Saat saya mengerjakan PyJob, saya menemukan kesalahan di PyWorkbooks yang sedang saya koreksi, jadi saya ingin mengimpor versi pengembangan.
Ada beberapa cara untuk mengerjakan keduanya (saya bisa meletakkan proyek PyWorkbooks saya di dalam PyJob, misalnya), tetapi terkadang saya masih perlu bermain-main dengan jalurnya. Namun, saya tidak bisa begitu saja melakukan sys.path.append()
ke folder tempat PyWorkbooks berada . Mengapa? Karena python akan menemukan PyWorkbooks saya yang terinstal terlebih dahulu!
Inilah mengapa Anda harus melakukan sys.path.insert (1, path_to_dev_pyworkbooks)
Singkatnya:
sys.path.append(path_to_dev_pyworkbooks)
import PyWorkbooks # does NOT import dev pyworkbooks, imports installed one
atau:
sys.path.insert(1, path_to_dev_pyworkbooks) # based on comments you should use **1 not 0**
import PyWorkbooks # imports correct file
Hal ini telah menyebabkan beberapa hangup bagi saya di masa lalu, dan saya akan sangat menyukainya jika kami (sebagai komunitas) mulai merekomendasikan sys.path.insert(1, path)
, seolah-olah Anda memasukkan jalur secara manual, menurut saya aman untuk mengatakan bahwa itu adalah jalur yang Anda inginkan menggunakan!
Atau apakah saya memiliki sesuatu yang salah? Ini adalah pertanyaan yang terkadang mengganggu saya dan saya menginginkannya di tempat terbuka!
sumber
sys.path.insert(1, dev_folder)
tetapi masih belum menemukan modul dev, dan hanya menggunakan modul yang diinstal. Bagaimana cara mengatasinya?Jawaban:
Jika Anda memiliki beberapa versi paket / modul, Anda harus menggunakan virtualenv (penekanan saya):
Itulah mengapa orang menganggapnya
insert(0,
salah - ini adalah solusi sementara yang tidak lengkap untuk masalah mengelola banyak lingkungan.sumber
virtualenv
dan sebenarnya sedang mencari jawaban yang terkait dengan OP)venv
.Jika Anda benar-benar perlu menggunakan sys.path.insert, pertimbangkan untuk membiarkan sys.path [0] apa adanya:
sys.path.insert(1, path_to_dev_pyworkbooks)
Ini mungkin penting karena kode pihak ketiga mungkin bergantung pada kesesuaian dokumentasi sys.path :
sumber
Anda membingungkan konsep appending dan prepending. kode berikut adalah prepending:
sys.path.insert(1,'/thePathToYourFolder/')
itu menempatkan informasi baru di awal (yah, kedua, tepatnya) dari urutan pencarian yang akan dilalui oleh penerjemah Anda.
sys.path.append()
meletakkan hal-hal di akhir urutan pencarian.Sangat disarankan agar Anda menggunakan sesuatu seperti
virtualenv
daripada mengkodekan direktori paket Anda secara manual kePYTHONPATH
setiap saat. untuk menyiapkan berbagai ekosistem yang memisahkan paket situs Anda dan kemungkinan versi python, baca dua blog ini:pengenalan ekosistem python
bootstrap lingkungan virtual python
jika Anda memutuskan untuk beralih ke jalur isolasi lingkungan, Anda pasti akan mendapat manfaat dengan melihat ke virtualenvwrapper: http://www.doughellmann.com/docs/virtualenvwrapper/
sumber