Używasz zmiennych z jednego skryptu Python w innych skryptach Python?

9

Chcę skonfigurować pojedynczy plik Pythona zawierający zmienne, które mają położenie wszystkich moich źródeł danych. Byłoby to wykorzystane przez wszystkie moje skrypty, a następnie, gdy zmienia się źródło danych, muszę edytować tylko jeden plik.

Mój plik Data_sources.py wyglądałby mniej więcej tak:

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"

i tak dalej...

Jak uzyskać wszystkie moje skrypty, aby załadować lub uzyskać dostęp do tych zmiennych w pliku Data_sources.py?

Błąd użytkownika
źródło
Pytania takie jak to, które są czystym Pythonem, a nie dotyczące modułu Pythona lub pakietu witryny dla GIS, powinny być zwykle badane / zadawane w Stack Overflow .
PolyGeo

Odpowiedzi:

10

Możesz utworzyć zainstalowany moduł Pythona, który można importować z każdego uruchomionego skryptu Python, używając Distutils do jego spakowania.

Z dokumentu Python:

Jeśli wszystko, co chcesz zrobić, to rozpowszechnić moduł o nazwie foo zawarty w pliku foo.py, wówczas skrypt instalacyjny może być tak prosty:

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

Następnie możesz go zainstalować za pośrednictwem

python.exe setup.py install

Następnie możesz zaimportować foo z dowolnego skryptu Python lub użyć

python.exe setup.py bdist_wininst

Aby utworzyć instalator systemu Windows dla modułu, aby można go było rozpowszechniać na innych komputerach.

Jason Scheirer
źródło
w książce „Byte of Python” znajduje się ładny rozdział pokazujący przykłady budowania za pomocą modułów importujących.
jonatr
Podoba mi się ta sugestia stworzenia modułu, ale nie znam się na nich zbyt dobrze. Polecenie „python.exe setup.py install” użyje wskaźnika do foo.py, czy użyje tego, co aktualnie znajduje się w foo.py? Jeśli później zmienię foo.py, moduł będzie nadal aktualny? Dzięki.
Błąd użytkownika
Poszukam też tej książki. Dzięki za pomoc Jason i Jonatr.
Błąd użytkownika
Korekta słownictwa: bardziej precyzyjne słowo python to „pakiet” - pomocne w wyszukiwaniu dokumentacji i dla jasności, że pakiety i moduły to dwie różne rzeczy w świecie python. Ponadto sugestia / podpowiedź: Jeśli to zrobisz setup.py develop(zamiast install), zmiany w pakiecie zostaną pobrane, gdy tylko zostaną zapisane, bez potrzeby ponownej instalacji. (Jest to prawdopodobnie odpowiednie dla pierwotnego data_sources.py pytającego.)
Dan S.
3
Czy użytkownik nie pyta tylko, jak zaimportować? Odpowiedz na to poniżej.
sgillies
12

W dowolnym skrypcie w tym samym katalogu, co Data_sources.py, wstaw

from Data_sources import BC_BEC, BC_TFL

na górze. Działa to, ponieważ katalog roboczy zawsze znajduje się na początku ścieżki python, chyba że został zmodyfikowany.

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

Zobacz także: http://diveintopython.org/getting_to_know_python/everything_is_an_object.html#d0e4550

Jeśli chcesz udostępnić dane szerzej, możesz je spakować tak, jak sugerowali inni.

sgillies
źródło