Мне сложно понять, как импорт модулей работает в 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
import
в моем,TestCase.py
но он все равно дал мне ту же ошибку. Я предполагаю, что это потому, что он находится в подкаталоге__init__.py
?from ... import ...
право?from myapp.tests import TestCase from a script outside myapp. If you're running
python TestCase.py` в папке тестов, вы не можете выполнять относительный импортfrom fodername import file_name_of_my_py_code
, но когда я попытался получить доступ к объекту, определенному вfile_name_of_my_py_code.py
нем, говоритNameError: name 'ClassName' is not defined
Функция
import
ищет файлы в вашем окружении PYTHONPATH. переменная и ваш локальный каталог. Таким образом, вы можете поместить все свои файлы в один каталог или экспортировать введенный путь в терминал:export PYTHONPATH="$PYTHONPATH:/path_to_myapp/myapp/myapp/"
источник
export
мы установили «PYTHONPATH =% PYTHONPATH%; C: \ path_to_myapp \ myapp \ myapp \»путь экспорта - хороший способ. Другой способ - добавить .pth в местоположение ваших пакетов сайта. На моем Mac мой python хранит пакеты сайтов в / Library / Python, как показано ниже
/Library/Python/2.7/site-packages
Я создал файл с именем awesome.pth в /Library/Python/2.7/site-packages/awesome.pth и в этом файле поместил следующий путь, который ссылается на мои потрясающие модули
источник
Можешь попробовать
from myapp.myapp import SomeObject
потому что имя вашего проекта такое же, как myapp.py, что заставляет его сначала искать документ проекта
источник
В вашем первом каталоге myapp вы можете добавить файл setup.py и добавить два кода Python в setup.py
from setuptools import setup setup(name='myapp')
в вашем первом каталоге myapp в командной строке используйте pip install -e. установить пакет
источник
pip install
в Windows 10 по умолчанию устанавливается в 'Program Files / PythonXX / Lib / site-packages', который является каталогом, требующим прав администратора. Поэтому я исправил свою проблему, запустив pip install от имени администратора (вам нужно открыть командную строку от имени администратора, даже если вы вошли в систему с учетной записью администратора). Кроме того, безопаснее вызывать pip из python.например,
python -m pip install <package-name>
вместо
pip install <package-name>
источник
Тебе нужно иметь
во всех папках с кодом, с которым вам нужно взаимодействовать. Вам также необходимо указывать имя верхней папки вашего проекта при каждом импорте, даже если файл, который вы пытались импортировать, находится на том же уровне.
источник
В моем случае это было сюрпризом для Windows и Python, несмотря на то, что имена файлов Windows не чувствительны к регистру, импорт Python -. Поэтому, если у вас есть
Stuff.py
файл, вам нужно импортировать это имя как есть.источник
скажем, я пишу модуль
import os my_home_dir=os.environ['HOME'] // in windows 'HOMEPATH' file_abs_path=os.path.join(my_home_dir,"my_module.py") with open(file_abs_path,"w") as f: f.write("print('I am loaded successfully')") import importlib importlib.util.find_spec('my_module') ==> cannot find
мы должны указать python, где искать модуль. мы должны добавить наш путь к
sys.path
import sys sys.path.append(file_abs_path)
теперь
importlib.util.find_spec('my_module')
возвращается:ModuleSpec(name='my_module', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7fa40143e8e0>, origin='/Users/name/my_module.py')
мы создали наш модуль, мы сообщили python его путь, теперь мы можем его импортировать
import my_module //I am loaded successfully
источник