2015-02-11 5 views
2

Так я структурировать почти все мои проекты, как это:Редактирование PYTHONPATH для каждого сценария в проекте

корень/
| - Сценарии/
| - SRC/
| - пр ...

Я положил готовые к выполнению сценариев в сценариях/и импортируемые модули в и /, и по соглашению запускать каждый сценарий из корневого каталога (поэтому я всегда оставаться в корне, а затем введите «питон скрипты/независимо»)

Для того, чтобы иметь возможность импортировать код из SRC /, я решил начать каждый скрипт с этим:

import sys 
import os 
# use this to make sure we always have the dir we ran from in path 
sys.path.append(os.getcwd()) 

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

Мой вопрос: считается ли этот плохой стиль? Мне нравятся мои соглашения о всегда запущенных сценариях из корневого каталога и сохранение моих сценариев отдельно от моих модулей, но кажется, что странная политика всегда редактирует переменную пути для каждого написанного сценария.

Если это считается плохим, вы могли бы предоставить альтернативные рекомендации? Либо разные способы сохранить мои существующие конвенции или рекомендации для разных способов структурирования проектов были бы замечательными!

Спасибо!

ответ

0

Моя рекомендация заключается в использовании:

root/$ python -m scripts.whatever 

С -m использовать . обозначения, а не путь к файлу и вам не нужно настроить код пути в каждом из сценариев, потому что -m говорит Python чтобы начать искать импорт в каталоге, где вы назвали Python.

Если файловая структура также случается быть установлена ​​с помощью setup.py и может быть найдена в site_packages есть некоторые другие вещи, чтобы рассмотреть следующие вопросы:

  1. Если вы звоните -m от корня структуры каталогов (как I «ве было показано выше) он будет вызывать код найден в ваших каталогах
  2. Если вы звоните -m из любой другой, он найдет установленный код из sys.path и называем это

Это может быть тонкая ошибка, если вы используете интерпретатор, в котором установлен ваш пакет, и вы пытаетесь локально внести изменения в свои сценарии и не можете понять, почему ваших изменений нет (это произошло с который не использовал виртуальную среду).