¿Usa variables de un script de Python en otros scripts de Python?

9

Quiero configurar un único archivo de Python que contenga variables que tengan las ubicaciones de todas mis fuentes de datos. Esto sería utilizado por todos mis otros scripts, luego, a medida que cambie la fuente de datos, solo tengo que editar un archivo.

Mi Data_sources.py se vería así:

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"

y así...

¿Cómo consigo que todos mis otros scripts carguen o accedan a estas variables en Data_sources.py?

Error de usuario
fuente
Preguntas como esta, que son Python puro en lugar de un módulo Python o un paquete de sitio para SIG, normalmente deben investigarse / preguntarse en Stack Overflow .
PolyGeo

Respuestas:

10

Puede crear un módulo Python instalado que se pueda importar desde cada script Python que ejecute utilizando Distutils para empaquetarlo.

Del documento de Python:

Si todo lo que quiere hacer es distribuir un módulo llamado foo, contenido en un archivo foo.py, entonces su script de configuración puede ser tan simple como esto:

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

Luego puede instalarlo a través de

python.exe setup.py install

Y luego puede importar foo desde cualquier script de Python, o puede usar

python.exe setup.py bdist_wininst

Para crear un instalador de Windows para el módulo para que pueda distribuirlo a otras computadoras.

Jason Scheirer
fuente
Hay un buen capítulo en el libro 'Byte de Python' que muestra ejemplos de construcción usando módulos de importación ang.
jonatr
Me gusta esta sugerencia de crear un Módulo, pero no conozco mucho de ellos. El comando "python.exe setup.py install" usará un puntero a foo.py, ¿o usará lo que está actualmente en foo.py? Si luego cambio foo.py, ¿el módulo seguirá estando actualizado? Gracias.
Error de usuario
También buscaré ese libro. Gracias por la ayuda Jason y jonatr.
Error de usuario
Corrección de vocabulario: la palabra python más precisa es "paquete": útil para buscar documentación y dejar en claro que los paquetes y los módulos son dos cosas diferentes en el mundo python. Además, una sugerencia / sugerencia: si lo hace setup.py develop(en lugar de install), las ediciones del paquete se recogerán tan pronto como se guarden, sin necesidad de una reinstalación. (Esto probablemente sea apropiado para el data_sources.py del interrogador original).
Dan S.
3
¿No está el usuario preguntando cómo importar? Responde a eso a continuación.
sgillies
12

En cualquier script en el mismo directorio que Data_sources.py, coloque

from Data_sources import BC_BEC, BC_TFL

en la cima. Esto funciona porque el directorio de trabajo siempre está al principio de la ruta de Python a menos que lo haya modificado.

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

Ver también: http://diveintopython.org/getting_to_know_python/everything_is_an_object.html#d0e4550

Si desea compartir los datos más ampliamente, puede empaquetarlos como otros han sugerido.

sgillies
fuente
8

Cree un archivo de configuración de texto y léalo con el ConfigParser de Python .

Ejemplos ligeramente mejores que la documentación oficial en http://effbot.org/librarybook/configparser.htm

geographika
fuente
@usererror: un paquete es bueno para distribuir código, pero en realidad no resuelve el problema de mantener sus parámetros en un solo lugar.
geographika