Por que tantas aplicações / frameworks manter seus arquivos de configuração em um formato executado-un?

StackOverflow https://stackoverflow.com/questions/1642413

Pergunta

Muitas estruturas de manter seus arquivos de configuração em um idioma diferente do resto do programa. Por exemplo, Appengine mantém a configuração em formato yaml. para comparar, o Django settings.py é um módulo python. Há muitas desvantagens que eu posso ver com isso.

Se o seu na mesma língua que resto do programa, eu posso

fazer coisas interessantes no arquivo de configuração.

 MEDIA_DIR = os.path.join(os.path.dir(__file__), 'media')
 #Or whaever the correct cals are, you get the idea.
  • Não tem que aprender um novo formato (reconhecidamente leve)
  • As minhas ferramentas de trabalho como esperado com ele.
  • Eu posso apenas fazer import conf etc.

Eu posso ver as vantagens se fosse uma linguagem de pesos pesados ??como C / C ++ etc, mas para python por isso que faz sentido. Parece apenas como tirar o poder sem adição de quaisquer benefícios.

Foi útil?

Solução

Alguns designers quadro sentir que os arquivos de configuração são locais inadequados para a lógica pesado. Assim como o MVC framework impede de colocar lógica onde não pertence, o arquivo de configuração o impede de programação colocando onde ele não pertence.

É uma questão de gosto e filosofia.

Dito isso, eu prefiro o método de Django.

Outras dicas

Python pode não ser sempre a única linguagem que AppEngine executado. Assim, o mesmo arquivo de configuração yaml poderia dirigir um aplicativo appengine escrito em, por exemplo, java ou perl

Às vezes você precisa usar uma ferramenta automática / GUI para analisar e / ou gerar e / ou modificar um arquivo de configuração. Isto não é fácil se o seu conffile é um script python.

Há uma razão muito boa: se o seu programa é distribuído em um ambiente inseguro, como o computador do usuário, a execução de um arquivo de texto que é tão fácil de modificar é a porta aberta para muitos vírus. Isso é menos o caso de uma aplicação Django onde o aplicativo está hospedado no servidor - um ambiente seguro. Mas com um aplicativo distribuído no Windows usando py2exe, você deve abster-se de fazer o seu programa de executar coisas aleatórias.

Outra razão para usar uma sintaxe como YAML é que você pode manipular o arquivo usando outras ferramentas, até mesmo outros idiomas, o formato é bastante portátil e documentado.

Dito isto, quando eu preciso ter um arquivo de configuração com um programa de python, eu uso um Dictionnary python com medidas pouco de segurança:

  • remover o delimitador {} de modo que não faz eval diretamente para uma expressão python
  • safe_eval para descartar qualquer item executável.

Provavelmente só não lhes ocorre que eles poderiam fazê-lo. Muitos programadores são dos velhos tempos em linguagens de script eram lentos e não muito mais simples do que as linguagens de programação (basta olhar para coisas como conchas Unix). Quando linguagens dinâmicas bacana veio junto, eles apenas preso com "apenas texto arquivos config" porque é isso que eles sempre fizeram.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top