2016-05-30 3 views
2

Я пытаюсь импортировать модуль, который я написал в python, который просто распечатывает список, содержащий числа. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу иметь возможность импортировать ее из отдельного каталога, но ответы, которые я прочитал до сих пор, похоже, не работают для моей ситуации.Импорт пользовательских модулей в python из каталога

Например, если я хочу, чтобы импортировать printnumbers.py из каталога в моей папке документов я должен реализовать следующее:

import sys 
    sys.path.append('/home/jake/Documents') 
    import printnumbers.py 

Это snipit результатов коды в «ошибке импорта» говорит мне, что указанный модуль не существует. Я не совсем уверен, с чего начать, я проверил несколько раз, чтобы убедиться, что это правильное написание пути, а также имени модуля. Я все еще пытаюсь понять, что делает добавление к «sys.path». Насколько я понимаю, он говорит программе искать модули в этом каталоге?

Спасибо за каждого, кто отвечает на мой довольно новичок вопрос. Я просто ищу лучшего понимания этого, что документация python не обеспечивает мое настроение.

ответ

7

Когда файл printnumbers.py, модуль называется printnumbers (без .py). Поэтому использование

import printnumbers 

import sys 
sys.path.append('/home/jake/Documents') 

присоединяет '/home/jake/Documents' до конца sys.path. Каталоги, перечисленные в sys.path, ищутся (в указанном порядке) всякий раз, когда оператор импорта заставляет Python искать модуль. (Уже импортированные модули кэшируются в sys.modules, поэтому Python не всегда нужно искать sys.path каталоги импортировать модуль ...)

Так что если у вас есть файл /home/jake/Documents/printnumbers.py, то import printnumbers заставит Python импортировать его при наличии нет другого файла с именем printnumbers.py в каталоге, указанном в sys.path, перед /home/jake/Documents/.

Обратите внимание, что инъекции каталогов в sys.path - это не обычный способ настройки Python для поиска модулей. Обычно предпочтительно добавлять /home/jake/Documents в переменную окружения PYTHONPATH. sys.path будет автоматически включать каталоги, перечисленные в переменной среды PYTHONPATH.

+0

Мальчик, я чувствую себя полным dunce, которого я мог бы поклясться. Я видел расширение «.py» в конце примера, который я просматривал. Просто протестируйте свое решение, и он отлично работает сейчас. Огромное спасибо за помощь. – Ragecoder

+0

Это сейчас имеет большой смысл. Почему импорт не удается при добавлении расширения? Мне сейчас интересно. Означает ли это, что я мог бы иметь файл без типа, импортированного как модуль python? – Ragecoder

+0

Нет, вы не можете импортировать .txt или .jpg в качестве модуля python.Python в фоновом режиме определит, имеет ли имя модуля в текущем каталоге тип .py и импортирует его соответствующим образом. попытка импортировать что-либо еще вызовет ошибку импорта. – TheLazyScripter

1

и еще одна вещь, использовать пустой __ инициализации __.py файл вам каталог , чтобы сделать его как пакет питона (Python только тогда будет знать, что это каталог является каталогом пакета Python, кроме обычный каталог ). Таким образом, вы можете импортировать модули из этого пакета из каталога .

Смежные вопросы