Как импортировать модуль из другого проекта в Python?

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

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 есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
620
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не добавляйте 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('../..'))

Хотя это технически законно и иногда правильно, возиться с sys.path в большинстве случаев является неправильным решением — лучше отредактировать переменную среды PYTHONPATH (docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH)

bruno desthuilliers 28.05.2019 12:25

У меня довольно смешанные чувства по этому поводу. Если это большой и важный проект, над которым работает @Guna33, правильным решением будет правильно упаковать project1 и управлять им с помощью pip. Если это небольшой одноразовый скрипт для конкретного пользователя, то действительно ли имеет значение, изменяете ли вы sys.path или нет. Может быть, если это что-то среднее, вещь, которую вы используете совсем немного, но которую вы не собираетесь распространять среди других?

Markus Meskanen 28.05.2019 12:36

на самом деле (при условии, что оба проекта являются приложениями, что, по-видимому, имеет место с учетом модулей main), правильно было бы извлечь общий код в отдельную библиотеку, упаковать эту библиотеку и установить ее в обоих проектах virtualenv (или эквивалентный ) с помощью pip (или эквивалента).

bruno desthuilliers 28.05.2019 12:49

Да, но, как я уже сказал, если это небольшой пользовательский скрипт, а Guna33 может просто изучать Python или бездельничать, это огромное излишество, и нет ничего плохого в том, чтобы напрямую изменить путь.

Markus Meskanen 28.05.2019 13:10

Я полностью согласен с этим, но 1/мы недостаточно знаем контекст и 2/основная цель SO - создать надежную базу технических знаний, а не поощрять «программирование с копированием и вставкой» - поэтому ответы должны быть как как можно более общими и продвигать передовой опыт. Научить кого-то использовать sys.path — это хорошо, но в правильном ответе также должен быть упомянут PYTHONPATH и когда (и почему) использовать тот или иной.

bruno desthuilliers 28.05.2019 13:30

Другие вопросы по теме