Есть несколько способов сделать это.Быстро и грязно просто добавить его к пути вашего переводчика.
Вот мои настройки:
Matthews-MacBook-Pro:test_project matt$ tree
.
├── foo
│ └── bar
│ └── baz
│ └── target_module.py
└── python
└── foo
└── code.py
5 directories, 2 files
Вот содержимое target_module.py
:
def my_func():
print("my func called.")
и как вы можете импортировать эту функцию в code.py
:
import os
import sys
# Cheat and just add it to python interpreter's path
this_dir = os.path.dirname(__file__)
sys.path.append(os.path.join(this_dir, "..", "..", "foo", "bar", "baz"))
import target_module as tm
tm.my_func()
, это выдаст:
Matthews-MacBook-Pro:test_project matt$ python python/foo/code.py
my func called.
или вы можете вызвать ее из каталога foo
, и она все еще будет работатьштраф:
Matthews-MacBook-Pro:test_project matt$ cd python/foo/
Matthews-MacBook-Pro:foo matt$ python code.py
my func called.
Вы также можете просто добавить каталог foo/bar/baz
в переменную окружения PYTHONPATH
вместо вызова sys.path.append
.Этот синтаксис зависит от оболочки: поэтому я дам вам Google, как установить переменные окружения для вашей конкретной оболочки.
В идеале вы хотите сделать ваши модули развертываемыми (т.е. использовать * 1028).* и distutils
или setuptools
и поместите __init__.py
в каждый модуль), а затем вы можете импортировать "как обычно" (вроде как вы можете "просто" import numpy
, и это работает). Но так как вы заявляете, что это наследие, возможно, вам будет трудно это сделать.Я понял: в устаревших системах все ставки выключены, а иногда быстрая и грязная - это хорошо (и, возможно, даже идеально, если вы не хотите тратить много времени на решение проблемы).
Я могу расширить этот ответ, если вы заинтересованы в создании развертываемых пакетов Python, а если нет, то вышеперечисленное должно выполнить работу.
HTH.