импортировать файл Python

1

Возможный дубликат:
Структура пакета Python

Здравствуйте, Я хочу импортировать файл python, который у меня есть в подкаталоге, который находится ниже корня моего основного файла. например.

import ../library/utils.py

Когда я помещаю это в свой код и запускаю его, я получаю ошибку компиляции.

Есть ли способ включить файлы из корневого каталога основного файла или он должен находиться в подкаталоге в корне?

Спасибо за вашу помощь.

  • 0
    Спасибо, не видел этого.
Теги:
python-2.7
python-import

2 ответа

3
Лучший ответ
import sys, os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'library')))

import utils

Это изменит переменную sys.path, содержащую каталоги для поиска файлов. Он также удостоверится, что он найдет его правильно, даже если вы запустите его как:

$ python the_file.py
$ python ../the_file.py
$ python /somewhere/over/the_file.py

Это будет работать для разработки, тестирования, обучения. Установленные файлы не нуждаются в такой конструкции.

  • 0
    Это немного менее неправильно, чем ответ Cat, потому что он пытается вычислить правильный абсолютный путь для добавления в sys.path, вместо того, чтобы предполагать, что рабочий каталог процесса будет таким же, как и база пакета Python. Тем не менее, это по-прежнему неверно, потому что __file__ может не отражать фактическое место установки источника (байт-код часто создается во временном каталоге сборки и затем перемещается в каталог установки). Это также терпит неудачу для яиц и почтовых файлов.
  • 2
    вау, ваше 100% решение должно быть довольно круто!
Показать ещё 1 комментарий
9

Вы не импортируете файлы, вы импортируете модули. Измените sys.path соответственно и выполните import utils, например.

import sys
sys.path.append('../library')
import utils
  • 1
    это будет работать, но не в зависимости от местоположения.
  • 0
    Почему я должен импортировать только модули. Например, я получил файл credentials.py, который содержит учетные данные БД, которые мне нужны во многих сценариях. Все сценарии используют учетные данные для импорта и получают доступ к переменным, определенным в credentials.py. Это плохая практика? Что бы посоветовали?
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню