Здесь у вас есть три основных варианта. Я прошел через все три как в производственной среде, так и в личных проектах. Во многом они строятся друг на друге. Тем не менее, мой совет - просто перейти к последнему.
Основная проблема заключается в том, что вам нужно, чтобы ваш каталог ./src
находился в пути поиска python. Это действительно то, что касается упаковки Python.
ПИТОН ПУТЬ
Самый простой, определяемый пользователем способ настроить путь к Python — через переменную среды PYTHONPATH
. Вы можете установить его во время выполнения, выполнив что-то вроде:
PYTHONPATH=/src python src/gui/gui.py
Конечно, вы также можете настроить это в своей глобальной среде, поэтому, надеюсь, все процессы, которым это нужно, найдут правильный PYTHONPATH
. Но, просто помните, вы всегда будете забывать один. Обычно в 3 часа ночи, когда наконец запускается ваша cron
задача.
Пакеты сайтов
Чтобы избежать необходимости в переменной среды, вы можете включить свое программное обеспечение в существующую запись в исходном пути или найти какой-то дополнительный способ добавить новый путь поиска. Таким образом, это может означать перетаскивание содержимого вашего каталога src
в /usr/lib/python2.7/site-packages
или туда, где находится ваша система site-packages
.
Поскольку вы можете не захотеть включать код в пакеты сайта, вы можете создать символическую ссылку для двух ваших подпакетов.
Это, конечно, далеко не идеально по ряду причин. Если вы не будете осторожны с именами, то внезапно каждая программа python на машине будет подвержена потенциальным конфликтам имен. Вы предоставляете свое программное обеспечение каждому пользователю на машине. Вы можете столкнуться с проблемами, если python будет обновлен. Если вы добавите новый подпакет, теперь вам нужно создать новую символическую ссылку.
Несколько лучший подход — включить файл .pth
где-нибудь в пакеты вашего сайта. Когда python встречает эти файлы, он добавляет содержимое (которое должно быть именем каталога) в путь поиска. Это позволяет избежать проблемы с необходимостью не забывать добавлять новую символическую ссылку для каждого нового подпакета.
виртуальный формат и упаковка
Лучшее решение — просто стиснуть зубы и сделать настоящую упаковку Python. Это, в сочетании с отличными инструментами, такими как virtualenv и pip, позволяет вам иметь изолированный (или полуизолированный) ) среда Python.
В virtualenv у вас будет собственный site-packages
только для вашего проекта, где вы можете легко установить в него свое программное обеспечение, избегая всех проблем, связанных с более ранними решениями. virtualenv также упрощает поддержку исполняемых скриптов, чтобы среда Python, в которой он работает, была именно такой, как вы ожидаете.
Единственным недостатком является то, что вам нужно написать и поддерживать setup.py
, который даст указание pip
(установщику Python) включить ваше программное обеспечение в virtualenv. Содержимое будет примерно таким:
!/usr/bin/env python
# -*- coding: utf-8 -*-
from distutils.core import setup
setup(
name='myproject',
package_dir={'myproject': 'src'},
scripts=['src/gui/gui.py', 'src/core/tools/tool1.py', 'src/core/tools/tool2.py']
)
Итак, чтобы настроить эту среду, она будет выглядеть примерно так:
virtualenv env
env/bin/pip install -e setup.py
Чтобы запустить ваш скрипт, вы просто должны сделать что-то вроде:
env/bin/tool1.py
person
rhettg
schedule
17.04.2013
python -m core.tools.tool1
- person Kos   schedule 04.04.2013setup.py
для определенияentry_points
, например,entry_points={'console_scripts': ['my-tool=my.core.tools.tool2:main', 'my-gui=my.gui.gui:main']}
(при условии, что пакет верхнего уровня называетсяmy
и функциональность находится вmain()
функциях). Он определяет сценарииmy-tool
иmy-gui
. - person jfs   schedule 17.04.2013