локальные модули python

у меня есть несколько каталогов проектов и я хочу иметь библиотеки/модули, которые специфичны для них. Например, у меня может быть такая структура каталогов:

myproject/
  mymodules/
    __init__.py
    myfunctions.py
  myreports/
    mycode.py

предположим, что есть функция под названием add на myfunctions.py, Я могу позвонить из mycode.py С самой наивной рутиной:

execfile('../mymodules/myfunctions.py')
add(1,2)

но чтобы быть более изощренным в этом, я также могу сделать

import sys
sys.path.append('../mymodules')
import myfunctions

myfunctions.add(1,2)

это самый идиоматический способ сделать это? Есть также некоторые упоминания о изменение PYTHONPATH (os.environ['PYTHONPATH']?), но это или другие вещи, которые я должен рассмотреть?

кроме того, я видел import операторы, содержащиеся в операторах класса, и в других случаях, определенных в верхней части файла Python, который содержит определение класса. Есть ли правильный/предпочтительный способ сделать это?

1 ответов


Не связывайтесь с execfile или sys.path.append если нет какой-то очень веской причины для этого. Скорее, просто расположите свой код в правильные пакеты python и выполните импорт, как и в любой другой библиотеке.

если mymodules на самом деле части одного большого проекта, а затем установить пакет Вот так:

myproject/
    __init__.py
    mymodules/
        __init__.py
        myfunctions.py
    myreports/
        __init__.py
        myreportscode.py

и затем вы можете импортировать mymodules из любого места в коде вроде этого:

from myproject.mymodules import myfunctions
myfunctions.add(1, 2)

если mymodules код используется несколько отдельных и отдельных проектов, а затем просто сделать его в пакет в своем собственном праве и установить его в любой среде, в которой он должен использоваться.