no_one
@no_one

Как добавить, изменить и сохранить путь к модулю в переменной sys.path в Python?

Всем привет.
ОС Windows, IDE PyCharm 2017, Python 3.6.2.
Есть 2 файла classes.py и main.py. Файл classes.py находиться в D:\Tasks_Python\My_modules, файл main.py в D:\Tasks_Python. В classes.py написан основной код, в main.py импортирую модуль classes.py:
1 вариант: import classes, ошибка No module named classes
2 вариант: from classes import Person, Employee - та же самая ошибка
Понял что не прописан путь к модулю classes.py, проверил sys.path, так и есть - есть только D:\Tasks_Python и системные модули.
3 вариант: from My_modules import classes - явно указал путь, все заработало. Но, мне не нужен весь модуль, а только некоторые его методы, классы, а то он так весь исполняется.
Как я пробовал это исправить:
1. создал переменную среды PYTHONPATH для пользователя и системную - не работает.
2. добавлял в sys.path адрес модуля:
import sys
а) sys.path.append('D:\Tasks_Python\My_modules') - не работает (добавляет, но не сохраняет)
б) sys.path.insert(0, 'D:\Tasks_Python\My_modules') - не работает (добавляет, но не сохраняет)
3. Google не помог (может плохо искал)
Подскажи как прописать и сохранить путь к своему модулю в переменной sys.path.? В чем мои ошибки, что я делал не так?
Спасибо.
  • Вопрос задан
  • 8739 просмотров
Пригласить эксперта
Ответы на вопрос 4
@alex-t
Прогр. в команде rco.ru
Наверное, должно работать from My_modules.classes import Person, Employee

P.S. Обычно пакеты (My_modules) с большими буквами не используют, поскольку это фактически каталоги, они местами регстрозависимые, местами нет.
Ответ написан
@Andy_U
Обратная косая - это начало спец.символа. А чтобы именно она попала в строку, ее надо повторить.Типа:

sys.path.append('D:\\Tasks_Python\\My_modules')
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
dir_path = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, os.path.split(dir_path)[0])
Ответ написан
no_one
@no_one Автор вопроса
заколебала меня эта path :) короче работают только два варианта:
1. положил оба файла в одну папку
import classes  подчеркивается красным с ошибкой "No module named classes", но прога работает
people = [classes.Person('Tom', 111111), classes.Employee('Alise', 22222, 'Google')]
for person in people:
    person.display_info()
    print()

2. либо с указанием конкретного пути в импорте (думаю наиболее оптимальный вариант)
from my_modules.classes import Person, Employee, Student
people = [Person('Tom', 111111), Employee('Alise', 22222, 'Google'), Student('Bob', 333333, 'МГУ')]
for person in people:
    person.display_info()
    print()

Причем если явно указываю путь к модулю, то не работает
import my_modules.classes    ошибка "unused import statement"
people = [classes.Person('Tom', 111111), classes.Employee('Alise', 22222, 'Google'), classes.Student('Bob', 333333, 'МГУ')]
for person in people:
    person.display_info()
    print()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы