Использование переменных из одного скрипта Python в других скриптах Python?

9

Я хочу настроить один файл Python, содержащий переменные, в которых расположены все мои источники данных. Затем это будет использоваться всеми моими другими сценариями, а затем при изменении источника данных мне нужно будет отредактировать только один файл.

Мой Data_sources.py будет выглядеть примерно так:

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"

и так далее...

Как мне получить все мои другие скрипты для загрузки или доступа к этим переменным в Data_sources.py?

Ошибка пользователя
источник
Такие вопросы, как этот, которые относятся к чисто Python, а не к модулю Python или пакету сайта для ГИС, обычно следует исследовать / задавать в Stack Overflow .
PolyGeo

Ответы:

10

Вы можете создать установленный модуль Python, который импортируется из каждого скрипта Python, который вы запускаете, используя Distutils для его упаковки.

Из документа Python:

Если все, что вам нужно, это распространить модуль с именем foo, содержащийся в файле foo.py, то ваш скрипт установки может быть таким простым:

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

Затем вы можете установить его через

python.exe setup.py install

И тогда вы можете импортировать foo из любого скрипта Python, или вы можете использовать

python.exe setup.py bdist_wininst

Создать установщик Windows для модуля, чтобы вы могли распространять его на другие компьютеры.

Джейсон Шайрер
источник
в книге «Byte of Python» есть хорошая глава, показывающая примеры сборки с использованием модулей импорта из англ.
Jonatr
Мне нравится это предложение о создании модуля, но я не очень разбираюсь в них. Команда «python.exe setup.py install» будет использовать указатель на foo.py или будет использовать то, что в данный момент находится в foo.py? Если я позже изменю foo.py, модуль все еще будет текущим? Спасибо.
Ошибка пользователя
Я также поищу эту книгу. Спасибо за помощь Джейсон и Джонатр.
Ошибка пользователя
Поправка к словарю: более точное слово Python - «пакет» - полезно для поиска документации и для ясности, что пакеты и модули - это две разные вещи в мире Python. Кроме того, предложение / подсказка: если вы сделаете setup.py develop(вместо install), изменения в пакет будут приняты, как только они будут сохранены, без необходимости переустановки. (Это, вероятно, подходит для data_sources.py исходного опрашивающего.)
Дэн С.
3
Разве пользователь не спрашивает, как импортировать? Ответьте на это ниже.
sgillies
12

В любой скрипт в той же директории, что и Data_sources.py, поместите

from Data_sources import BC_BEC, BC_TFL

наверху. Это работает, потому что рабочий каталог всегда находится во главе пути python, если вы не изменили его.

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

Смотрите также: http://diveintopython.org/getting_to_know_python/everything_is_an_object.html#d0e4550

Если вы хотите поделиться данными более широко, вы можете упаковать их, как предложили другие.

sgillies
источник
8

Создайте текстовый файл конфигурации и прочитайте его с помощью Python ConfigParser .

Чуть более приятные примеры, чем официальная документация на http://effbot.org/librarybook/configparser.htm

geographika
источник
@usererror - пакет хорош для распространения кода, но на самом деле он не решает проблему хранения ваших параметров в одном месте.
география