Невозможно импортировать мои собственные модули в Python
Мне сложно понять, как работает импорт модулей в 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
Ответы
Ответ 1
В вашем конкретном случае похоже, что вы пытаетесь импортировать 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 для создания настройки script. Таким образом, любой может легко установить ваш пакет с помощью команды типа python setup.py install
, и она будет доступна везде на их машине. Если вы серьезно относитесь к пакету, вы можете даже добавить его в индекс пакета Python, PyPI.
Ответ 2
Функция import
ищет файлы в вашем PYTHONPATH env. переменной и вашей локальной директории. Таким образом, вы можете либо поместить все ваши файлы в один каталог, либо экспортировать путь, вводящий в терминал::
export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/"
Ответ 3
путь экспорта - хороший способ. Другим способом является добавление .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
Ответ 4
Вы можете попробовать
from myapp.myapp import SomeObject
потому что имя вашего проекта совпадает с именем myapp.py, которое сначала выполняет поиск документа проекта
Ответ 5
В вашем первом каталоге myapp вы можете добавить файл setup.py и добавить два кода python в setup.py
from setuptools import setup
setup(name='myapp')
в вашем первом каталоге myapp в командной строке, используйте pip install -e. для установки пакета
Ответ 6
pip install
в Windows 10 по умолчанию устанавливается в "Program Files/PythonXX/Lib/site-packages", который является каталогом, требующим административных привилегий. Поэтому я исправил проблему, запустив pip install от имени администратора (вы должны открыть командную строку от имени администратора, даже если вы вошли в систему с учетной записью администратора). Также безопаснее вызывать pip из python.
например
python -m pip install <package-name>
вместо
pip install <package-name>
Ответ 7
В моем случае это был сюрприз Windows против Python, несмотря на то, что имена файлов в Windows не чувствительны к регистру, импорт из Python. Так что если у вас есть файл Stuff.py
вам нужно импортировать это имя как есть.
Ответ 8
Попробуйте запустить программу основного файла, в которой создана функция.