Menggunakan variabel dari satu skrip Python di skrip Python lain?

9

Saya ingin mengatur file python tunggal yang berisi variabel yang memiliki lokasi semua sumber data saya. Ini kemudian akan digunakan oleh semua skrip saya yang lain, kemudian sebagai sumber data berubah, saya hanya perlu mengedit satu file.

Data_sources.py saya akan terlihat seperti ini:

BC_BEC = "Database Connections\\BC.sde\\FOREST_BC.BC_Eco\\BC.BC_BEC"
BC_TFL = "Database Connections\\Forest_BC.sde\\BC.BC_Admin\\BC.TFL_Boundary"

dan seterusnya...

Bagaimana cara mendapatkan semua skrip saya yang lain untuk memuat atau mengakses variabel-variabel ini di Data_sources.py?

Kesalahan Pengguna
sumber
Pertanyaan seperti ini, yang merupakan Python murni dan bukan tentang modul Python atau paket situs untuk GIS biasanya harus diteliti / ditanyakan di Stack Overflow .
PolyGeo

Jawaban:

10

Anda bisa membuat modul Python yang diinstal yang dapat diimpor dari setiap skrip Python yang Anda jalankan dengan menggunakan Distutils untuk mengemasnya.

Dari dokumen Python:

Jika semua yang ingin Anda lakukan adalah mendistribusikan modul bernama foo, yang terkandung dalam file foo.py, maka skrip pengaturan Anda dapat sesederhana ini:

from distutils.core import setup
setup(name='foo',
      version='1.0',
      py_modules=['foo'],
      )

Anda kemudian dapat menginstalnya melalui

python.exe setup.py install

Dan kemudian Anda dapat mengimpor foo dari skrip Python, atau Anda dapat menggunakan

python.exe setup.py bdist_wininst

Untuk membuat installer windows untuk modul sehingga Anda dapat mendistribusikannya ke komputer lain.

Jason Scheirer
sumber
ada bab bagus dalam buku 'Byte of Python' yang menunjukkan contoh-contoh bangunan menggunakan modul impor dan ang.
Jonatr
Saya suka saran ini untuk membuat Modul, tetapi saya tidak terlalu tahu tentang mereka. Perintah "python.exe setup.py install" akan menggunakan pointer ke foo.py, atau akan menggunakan apa yang saat ini ada di foo.py? Jika nanti saya mengubah foo.py modul akan tetap terkini? Terima kasih.
Kesalahan Pengguna
Saya juga akan mencari buku itu. Terima kasih atas bantuan Jason dan Jonon.
Kesalahan Pengguna
Koreksi kosakata: kata python yang lebih tepat adalah "paket" - membantu untuk mencari dokumentasi, dan agar jelas bahwa paket dan modul adalah dua hal yang berbeda di dunia python. Juga, saran / petunjuk: Jika Anda melakukannya setup.py develop(bukan install), pengeditan paket akan diambil segera setelah disimpan, tanpa perlu menginstal ulang. (Ini mungkin cocok untuk data_sources.py penanya asli).
Dan S.
3
Bukankah pengguna hanya bertanya bagaimana cara mengimpor? Jawab itu di bawah.
sgillies
12

Dalam skrip apa pun di direktori yang sama dengan Data_sources.py, masukkan

from Data_sources import BC_BEC, BC_TFL

di atas. Ini berfungsi karena direktori yang berfungsi selalu berada di ujung jalur python kecuali Anda telah memodifikasinya.

>>> import sys
>>> sys.path[0] == ''
True

Lihat juga: http://diveintopython.org/getting_to_know_python/everything_is_an_object.html#d0e4550

Jika Anda ingin berbagi data lebih luas, Anda dapat mengemasnya seperti yang disarankan orang lain.

sgillies
sumber
8

Buat file konfigurasi teks dan bacalah dengan Python ConfigParser .

Contoh yang sedikit lebih baik daripada dokumentasi resmi di http://effbot.org/librarybook/configparser.htm

geografi
sumber
@usererror - paket yang baik untuk mendistribusikan kode, tetapi tidak benar-benar menyelesaikan masalah menjaga parameter Anda di satu tempat.
geografi