Usando variáveis ​​de um script Python em outros scripts Python?

9

Quero configurar um único arquivo python contendo variáveis ​​que tenham os locais de todas as minhas fontes de dados. Isso seria usado por todos os meus outros scripts e, à medida que a fonte de dados mudar, só preciso editar o arquivo.

Meu Data_sources.py ficaria assim:

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"

e assim por diante...

Como obtenho todos os meus outros scripts para carregar ou acessar essas variáveis ​​no Data_sources.py?

Erro do usuário
fonte
Perguntas como esta, que são puro Python, e não sobre um módulo Python ou pacote de sites para GIS, normalmente devem ser pesquisadas / feitas no Stack Overflow .
PolyGeo

Respostas:

10

Você pode criar um módulo Python instalado que é importável de todos os scripts Python executados usando o Distutils para empacotá-lo.

No documento do Python:

Se tudo o que você deseja fazer é distribuir um módulo chamado foo, contido em um arquivo foo.py, seu script de instalação pode ser tão simples quanto isto:

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

Você pode instalá-lo via

python.exe setup.py install

E então você pode importar foo de qualquer script Python ou pode usar

python.exe setup.py bdist_wininst

Para criar um instalador do Windows para o módulo, para que você possa distribuí-lo para outros computadores.

Jason Scheirer
fonte
há um bom capítulo no livro 'Byte of Python' mostrando exemplos de construção usando os módulos de importação.
21811 jonatr
Eu gosto dessa sugestão de criar um módulo, mas não tenho muito conhecimento deles. O comando "python.exe setup.py install" usará um ponteiro para foo.py ou usará o que está atualmente em foo.py? Se eu mudar mais tarde foo.py, o módulo ainda estará atualizado? Obrigado.
Erro de usuário 29/03
Também vou procurar esse livro. Obrigado pela ajuda Jason e Jonatr.
Usuário Erro
Correção de vocabulário: a palavra mais precisa do python é "pacote" - útil para procurar documentação e deixar claro que pacotes e módulos são duas coisas diferentes no mundo do python. Além disso, uma sugestão / dica: se você fizer setup.py develop(em vez de install), as edições no pacote serão selecionadas assim que forem salvas, sem a necessidade de reinstalação. (Este é provavelmente apropriado para data_sources.py da pergunta original).
Dan S.
3
O usuário não está apenas perguntando como importar? Responda a isso abaixo.
sgillies
12

Em qualquer script no mesmo diretório que Data_sources.py, coloque

from Data_sources import BC_BEC, BC_TFL

no topo. Isso funciona porque o diretório de trabalho está sempre no topo do caminho do python, a menos que você o modifique.

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

Consulte também: http://diveintopython.org/getting_to_know_python/everything_is_an_object.html#d0e4550

Se você deseja compartilhar os dados mais amplamente, pode empacotá-los como outros sugeriram.

sgillies
fonte
8

Crie um arquivo de configuração de texto e leia-o com o ConfigParser do Python .

Exemplos um pouco melhores do que a documentação oficial em http://effbot.org/librarybook/configparser.htm

geographika
fonte
@usererror - um pacote é bom para distribuir código, mas na verdade não resolve o problema de manter seus parâmetros em um só lugar.
geographika