Verwenden von Variablen aus einem Python-Skript in anderen Python-Skripten?


9

Ich möchte eine einzelne Python-Datei einrichten, die Variablen enthält, die die Speicherorte aller meiner Datenquellen enthalten. Dies wird dann von allen meinen anderen Skripten verwendet. Wenn sich eine Datenquelle ändert, muss ich nur die eine Datei bearbeiten.

Meine Data_sources.py würde ungefähr so ​​aussehen:

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"

und so weiter...

Wie kann ich alle meine anderen Skripte dazu bringen, diese Variablen in der Datei Data_sources.py zu laden oder darauf zuzugreifen?


Fragen wie diese, bei denen es sich eher um reines Python als um ein Python-Modul oder ein Site-Paket für GIS handelt, sollten normalerweise bei Stack Overflow recherchiert / gestellt werden .
PolyGeo

Antworten:


10

Sie können ein installiertes Python-Modul erstellen, das aus jedem von Ihnen ausgeführten Python-Skript importiert werden kann, indem Sie Distutils zum Packen verwenden .

Aus dem Python-Dokument:

Wenn Sie nur ein Modul namens foo verteilen möchten, das in einer Datei foo.py enthalten ist, kann Ihr Setup-Skript so einfach sein:

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

Sie können es dann über installieren

python.exe setup.py install

Und dann können Sie foo aus jedem Python-Skript importieren oder verwenden

python.exe setup.py bdist_wininst

So erstellen Sie ein Windows-Installationsprogramm für das Modul, damit Sie es auf andere Computer verteilen können.


Es gibt ein schönes Kapitel im Buch 'Byte of Python', das Beispiele für das Erstellen mit ang-Importmodulen zeigt.
Jonatr

Ich mag diesen Vorschlag, ein Modul zu erstellen, aber ich kenne sie nicht sehr gut. Der Befehl "python.exe setup.py install" verwendet einen Zeiger auf foo.py oder verwendet er das, was sich derzeit in foo.py befindet? Wenn ich später foo.py ändere, ist das Modul immer noch aktuell? Vielen Dank.
Benutzerfehler

Ich werde auch nach diesem Buch suchen. Danke für die Hilfe Jason und Jonatr.
Benutzerfehler

Wortschatzkorrektur: Das genauere Python-Wort ist "Paket" - hilfreich, um die Dokumentation nachzuschlagen und um klar zu machen, dass Pakete und Module zwei verschiedene Dinge in der Python-Welt sind. Außerdem ein Vorschlag / Hinweis: Wenn Sie dies tun setup.py develop(anstelle von install), werden Änderungen am Paket übernommen, sobald sie gespeichert werden, ohne dass eine Neuinstallation erforderlich ist. (Dies ist wahrscheinlich für die data_sources.py des ursprünglichen Fragestellers angemessen.)
Dan S.

3
Fragt der Benutzer nicht nur, wie er importieren soll? Antworte darauf unten.
Sgillies

12

Geben Sie in ein Skript im selben Verzeichnis wie Data_sources.py ein

from Data_sources import BC_BEC, BC_TFL

oben. Dies funktioniert, da sich das Arbeitsverzeichnis immer am Anfang des Python-Pfads befindet, sofern Sie es nicht geändert haben.

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

Siehe auch: http://diveintopython.org/getting_to_know_python/everything_is_an_object.html#d0e4550

Wenn Sie die Daten weiter verbreiten möchten, können Sie sie wie von anderen vorgeschlagen verpacken.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.