Я пытаюсь сослаться на старый модуль проекта для нового проекта, есть ли какой-либо возможный способ легко сослаться на модуль.
project1/
folder1/
main.py
secondary.py-----------
folder2/ |
test.py |
|
project2/ |
folder1/ |
main1.py |
<------------------
Поскольку я пытался добавить путь,
я не могу импортировать
import sys
sys.path.append('project1/folder1/secondary.py')
from project.folder1 import seconday
or someother formats
Не добавляйте Python файл к пути, добавьте путь, в котором находится весь упаковка. Например, если оба ваших проекта находятся в папке projects
, например:
~/Documents/projects/project1/
~/Documents/projects/project2/
Теперь вы бы сделали:
sys.path.append('~/Documents/projects')
from project1.folder1 import secondary
Вы также можете указать относительный путь и использовать sys.path.abspath()
для его преобразования:
sys.path.append(sys.path.abspath('../..'))
У меня довольно смешанные чувства по этому поводу. Если это большой и важный проект, над которым работает @Guna33, правильным решением будет правильно упаковать project1
и управлять им с помощью pip
. Если это небольшой одноразовый скрипт для конкретного пользователя, то действительно ли имеет значение, изменяете ли вы sys.path
или нет. Может быть, если это что-то среднее, вещь, которую вы используете совсем немного, но которую вы не собираетесь распространять среди других?
на самом деле (при условии, что оба проекта являются приложениями, что, по-видимому, имеет место с учетом модулей main
), правильно было бы извлечь общий код в отдельную библиотеку, упаковать эту библиотеку и установить ее в обоих проектах virtualenv (или эквивалентный ) с помощью pip (или эквивалента).
Да, но, как я уже сказал, если это небольшой пользовательский скрипт, а Guna33 может просто изучать Python или бездельничать, это огромное излишество, и нет ничего плохого в том, чтобы напрямую изменить путь.
Я полностью согласен с этим, но 1/мы недостаточно знаем контекст и 2/основная цель SO - создать надежную базу технических знаний, а не поощрять «программирование с копированием и вставкой» - поэтому ответы должны быть как как можно более общими и продвигать передовой опыт. Научить кого-то использовать sys.path
— это хорошо, но в правильном ответе также должен быть упомянут PYTHONPATH и когда (и почему) использовать тот или иной.
Хотя это технически законно и иногда правильно, возиться с
sys.path
в большинстве случаев является неправильным решением — лучше отредактировать переменную среды PYTHONPATH (docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH)