Подтвердить что ты не робот

Импортировать пакет python из локального каталога в интерпретатор

Я разрабатываю/тестирую пакет в своем локальном каталоге. Я хочу импортировать его в интерпретаторе (v2.5), но sys.path не включает текущий каталог. Сейчас я печатаю sys.path.insert(0,'.'). Есть ли способ лучше?

Кроме того,

from . import mypackage

не удается выполнить эту ошибку:

ValueError: Attempted relative import in non-package
4b9b3361

Ответ 1

Вы можете использовать относительный импорт только в модуле, который в свою очередь был импортирован как часть пакета - ваш script или интерактивный интерпретатор не был, поэтому, конечно, from . import (что означает "импорт из того же пакет, который я импортировал из" ) не работает. import mypackage будет прекрасным после того, как вы обеспечите, чтобы родительский каталог mypackage находился в sys.path (как вам удалось удалить текущую директорию из sys.path, я не знаю - у вас что-то странное на сайте. py, или...?)

Чтобы вернуть ваш текущий каталог в sys.path, на самом деле нет лучшего способа, чем положить его туда; -).

Ответ 2

Смотрите документацию для sys.path:

http://docs.python.org/library/sys.html#sys.path

Цитата:

Если каталог script недоступен (например, если интерпретатор вызывается в интерактивном режиме или если script считывается со стандартного ввода), путь [0] - это пустая строка, которая направляет Python на поиск модулей в текущий каталог.

Итак, нет необходимости обезьяны с sys.path, если вы начинаете интерпретатор python из каталога, содержащего ваш модуль.

Кроме того, чтобы импортировать ваш пакет, просто выполните:

import mypackage

Поскольку каталог, содержащий пакет, уже находится в sys.path, он должен работать нормально.

Ответ 3

Если вы хотите запустить немодифицированный python script, чтобы он импортировал библиотеки из определенного локального каталога, вы можете установить переменную среды PYTHONPATH - например, в bash:

export PYTHONPATH=/home/user/my_libs
python myscript.py

Если вы хотите, чтобы он импортировался из текущего рабочего каталога, используйте обозначение .:

export PYTHONPATH=.
python myscript.py

Ответ 4

Держите его простым:

 try:
     from . import mymodule     # "myapp" case
 except:
     import mymodule            # "__main__" case

Ответ 5

Простым способом заставить его работать - запустить script из родительского каталога, используя флаг python -m, например. python -m packagename.scriptname. Очевидно, что в этой ситуации вам нужен файл __init__.py, чтобы превратить ваш каталог в пакет.

Ответ 6

Использование sys.path должно включать текущий каталог уже.

Try:

import .

или

from . import sth

однако это может быть не очень хорошая практика, поэтому почему бы просто не использовать:

import mypackage

Ответ 7

Внутри пакета, если есть setup.py, то лучше его установить

pip install -e .

Ответ 8

Немного опоздал на вечеринку, но вот что сработало для меня:

>>> import sys
>>> sys.path.insert(0, '')

Видимо, если есть пустая строка, Python знает, что она должна смотреть в текущем каталоге. У меня не было пустой строки в sys.path, которая вызвала эту ошибку.

Ответ 9

Если вы хотите импортировать все методы из определенного пакета/файла в одном и том же каталоге, правильный способ импорта - это from mypackage import *