2012-03-27 2 views
0

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

 
project/ 
|--src 
| |--some_package 
|--test 
|--scripts 

Но тогда я не знаю, как иметь скрипты импортировать мой пользовательский пакет таким образом, что я могу запустить/ссылаться на скрипты из любого места без ошибок «пакет не может быть найден». Любая помощь приветствуется!

ответ

0

Один из способов установки и запуска этих сценариев на других машинах - это их упаковка с использованием distutils. См. http://docs.python.org/library/distutils.html.

В противном случае, если вы поместите файл __init__.py в каталог вашего дерева, Python увидит каталог как пакет и позволит вам импортировать модули из него. Например, если у вас есть эта структура:

project/ 
|some_script.py 
    |--some_package 
     |__init__.py 
     |some_module.py 
|--test 
    |__init__.py 
|--scripts 
    |__init__.py 

в some_script.py вы могли бы сделать это:

import some_package.some_module 

Это позволит сделать импорт из подкаталогов без сложной установки, чтобы поместить ваши модули где-то в пути Python. То же самое можно сделать для каталогов «test» и «scripts». (Вы, наверное, уже знаете, но __init__.py может быть просто пустой файл.)

+0

Да, но это некрасиво, и я действительно не хочу, чтобы сделать это в верхней части каждого скрипта. Кроме того, я уверен, что для этого требуются абсолютные пути, и в этом случае мой путь будет отличаться от другого, который использует скрипт и, следовательно, не будет масштабироваться. – Eli

+0

Ну, ваш вопрос не сказал, что вы хотите установить его на другие машины. В этом случае вам понадобится http://docs.python.org/library/distutils.html. – alan

+0

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

Смежные вопросы