Vous utilisez des variables d'un script Python dans d'autres scripts Python?


9

Je veux configurer un seul fichier python contenant des variables qui ont les emplacements de toutes mes sources de données. Cela serait ensuite utilisé par tous mes autres scripts, puis comme une source de données change, je n'ai qu'à modifier le seul fichier.

Mon Data_sources.py ressemblerait à ceci:

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"

etc...

Comment puis-je obtenir tous mes autres scripts pour charger ou accéder à ces variables dans le Data_sources.py?


Des questions comme celle-ci, qui sont du pur Python plutôt que sur un module Python ou un package de site pour SIG, devraient normalement être recherchées / posées à Stack Overflow .
PolyGeo

Réponses:


10

Vous pouvez créer un module Python installé qui est importable à partir de chaque script Python que vous exécutez en utilisant Distutils pour l'empaqueter.

Du document Python:

Si tout ce que vous voulez faire est de distribuer un module appelé foo, contenu dans un fichier foo.py, alors votre script de configuration peut être aussi simple que ceci:

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

Vous pouvez ensuite l'installer via

python.exe setup.py install

Et puis vous pouvez importer foo à partir de n'importe quel script Python, ou vous pouvez utiliser

python.exe setup.py bdist_wininst

Pour créer un programme d'installation Windows pour le module afin de pouvoir le distribuer à d'autres ordinateurs.


il y a un joli chapitre dans le livre «Byte of Python» montrant des exemples de construction en utilisant les modules d'importation ang.
jonatr

J'aime cette suggestion de créer un module mais je ne les connais pas très bien. La commande "python.exe setup.py install" utilisera un pointeur vers foo.py, ou utilisera-t-elle ce qui se trouve actuellement dans foo.py? Si je change plus tard foo.py, le module sera toujours à jour? Merci.
Erreur utilisateur

Je vais aussi chercher ce livre. Merci pour l'aide Jason et Jonatr.
Erreur utilisateur

Correction de vocabulaire: le mot python le plus précis est "package" - utile pour rechercher de la documentation et pour être clair que les packages et les modules sont deux choses différentes dans le monde python. En outre, une suggestion / astuce: si vous le faites setup.py develop(au lieu de install), les modifications apportées au package seront récupérées dès qu'elles sont enregistrées, sans avoir besoin d'une réinstallation. (Ceci est probablement approprié pour data_sources.py du questionneur d'origine.)
Dan S.

3
L'utilisateur ne demande-t-il pas simplement comment importer? Répondez à cela ci-dessous.
sgillies

12

Dans n'importe quel script du même répertoire que Data_sources.py, mettez

from Data_sources import BC_BEC, BC_TFL

au sommet. Cela fonctionne car le répertoire de travail est toujours en tête du chemin python, sauf si vous l'avez modifié.

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

Voir également: http://diveintopython.org/getting_to_know_python/everything_is_an_object.html#d0e4550

Si vous souhaitez partager les données plus largement, vous pouvez les regrouper comme d'autres l'ont suggéré.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.