Совместное использование модулей утилит в проектах Python
-
10-07-2019 - |
Вопрос
Какова была бы лучшая стратегия структуры каталогов для совместного использования модуля утилит в моих проектах на python? Поскольку общие модули будут обновлены новыми функциями, я бы не хотел помещать их в каталог установки python.
project1/
project2/
sharedUtils/
Из проекта1 я не могу использовать " import .. \ sharedUtils " ;, есть ли другой способ? Я бы не стал жестко кодировать «sharedUtils» место
Заранее спасибо
Решение
Сделать отдельный пакет отдельно? И поместить его в / site-packages вашей установки python?
Есть и мой личный фаворит, когда дело доходит до режима разработки: использование символических ссылок и / или *. pth
файлов.
Другие советы
Предположим, у вас есть sharedUtils / utils_foo
и sharedUtils / utils_bar
.
Вы можете отредактировать PYTHONPATH, включив в него sharedUtils
, а затем импортировать их в project1
и project2
, используя
import utils_foo
import utils_bar
etc.
В Linux вы можете редактировать ~ / .profile примерно так:
PYTHONPATH=/path/to/sharedUtils:/other/paths
export PYTHONPATH
Использование переменной окружения PYTHONPATH влияет на каталоги, которые python ищет при поиске модулей. Поскольку каждый пользователь может установить свою PYTHONPATH, это решение подходит для личных проектов. Р>
Если вы хотите, чтобы все пользователи на машине могли импортировать модули в sharedUtils
, тогда
Вы можете достичь этого, используя файл .pth
. То, куда вы поместите файл .pth
, может зависеть от вашего дистрибутива Python. Увидеть
http: //bob.pythonmac. орг / архив / 2005/02/06 / с использованием-PTH-файлы-для-питон-разработки /
Структура каталогов:
project1/foo.py
sharedUtils/bar.py
Используя каталоги, как вы их показали, из foo.py
внутри каталога project1
вы можете добавить относительный путь к sharedUtils
следующим образом:
import sys
sys.path.append("../sharedUtils")
import bar
Это позволяет избежать жесткого кодирования пути C: /../ sharedUtils
и будет работать до тех пор, пока вы не измените структуру каталогов. Р>