Не могу импортировать мои собственные модули в Python - PullRequest
111 голосов
/ 21 февраля 2012

Мне трудно понять, как работает импорт модулей в Python (я никогда раньше не делал этого ни на каком другом языке).

Допустим, у меня есть:

myapp/__init__.py
myapp/myapp/myapp.py
myapp/myapp/SomeObject.py
myapp/tests/TestCase.py

Теперь я пытаюсь получить что-то вроде этого:

myapp.py
===================
from myapp import SomeObject
# stuff ...

TestCase.py
===================
from myapp import SomeObject
# some tests on SomeObject

Однако я определенно делаю что-то не так, поскольку Python не видит, что myapp - это модуль:

ImportError: No module named myapp

Ответы [ 7 ]

79 голосов
/ 21 февраля 2012

В вашем конкретном случае похоже, что вы пытаетесь импортировать SomeObject из сценариев myapp.py и TestCase.py. Из myapp.py, сделайте

import SomeObject

, поскольку он находится в той же папке. Для TestCase.py выполните

from ..myapp import SomeObject

Однако , это будет работать, только если вы импортируете TestCase из пакета. Если вы хотите напрямую запустить python TestCase.py, вам придется возиться с вашим путем. Это можно сделать в Python:

import sys
sys.path.append("..")
from myapp import SomeObject

хотя обычно это не рекомендуется.

В общем, если вы хотите, чтобы другие люди использовали ваш пакет Python, вы должны использовать distutils для создания сценария установки. Таким образом, любой может легко установить ваш пакет с помощью команды, подобной python setup.py install, и он будет доступен везде на их компьютере. Если вы серьезно относитесь к пакету, вы можете даже добавить его в индекс пакетов Python, PyPI .

31 голосов
/ 21 февраля 2012

Функция import ищет файлы в вашей среде PYTHONPATH. переменная и ваш локальный каталог. Таким образом, вы можете либо поместить все свои файлы в одну директорию, либо экспортировать путь, набрав в терминале ::

export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/"
10 голосов
/ 21 мая 2013

путь экспорта - это хороший способ.Другой способ - добавить .pth в расположение пакетов вашего сайта.На моем mac мой python хранит пакеты сайтов в / Library / Python, показанном ниже

/Library/Python/2.7/site-packages

Я создал файл с именем awesome.pth в /Library/Python/2.7/site-packages/awesome.pth и вВ файл поместите следующий путь, который ссылается на мои удивительные модули

/opt/awesome/custom_python_modules
6 голосов
/ 06 марта 2017

Вы можете попробовать

from myapp.myapp import SomeObject

, потому что имя вашего проекта совпадает с myapp.py, что заставляет его сначала искать документ проекта

2 голосов
/ 21 августа 2018

pip install в Windows 10 по умолчанию устанавливается в «Program Files / PythonXX / Lib / site-packages», который является каталогом, требующим административных привилегий. Поэтому я исправил свою проблему, запустив pip install от имени администратора (вы должны открыть командную строку от имени администратора, даже если вы вошли в систему с учетной записью администратора). Также безопаснее вызывать pip из python.
например,
python -m pip install <package-name>
вместо
pip install <package-name>

2 голосов
/ 28 октября 2017

В вашем первом каталоге myapp вы можете добавить файл setup.py и добавить два кода Python в setup.py

from setuptools import setup
setup(name='myapp')

в вашем первом каталоге myapp в командной строке, используйте pip install -e.установить пакет

0 голосов
/ 17 мая 2018

В моем случае это был сюрприз Windows против Python, несмотря на то, что имена файлов Windows не чувствительны к регистру, импорт Python. Так что если у вас есть Stuff.py файл, вам нужно импортировать это имя как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...