Я хочу импортировать подпапки как модули. Следовательно, каждая подпапка содержит файл __init__.py
. Моя структура папок такая:
src\
main.py
dirFoo\
__init__.py
foofactory.py
dirFoo1\
__init__.py
foo1.py
dirFoo2\
__init__.py
foo2.py
В моем основном скрипте я импортирую
from dirFoo.foofactory import FooFactory
В этот заводской файл я включаю подмодули:
from dirFoo1.foo1 import Foo1
from dirFoo2.foo2 import Foo2
Если я вызываю свой foofactory, я получаю сообщение об ошибке, этот python не может импортировать подмодули foo1 и foo2:
Traceback (most recent call last):
File "/Users/tmp/src/main.py", line 1, in <module>
from dirFoo.foofactory import FooFactory
File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in <module>
from dirFoo1.foo1 import Foo1
ImportError: No module named dirFoo1.foo1
python
import
module
subdirectory
Razer
источник
источник
__init__.py
во все подпапки, из которых выполняется импорт.__init__.py
может сделать работу.Foo1
был в родительском каталоге, а один кодировал что-то вродеfrom Foo1 import *
. Есть ли способ добиться того же эффекта, чтобы вам не приходилось все ставить префиксомFoo1
?Просто уведомить здесь. (от новичка, keviv22)
Никогда и когда-либо ради вашего же блага называть папки или файлы такими символами, как «-» или «_». Если вы это сделаете, у вас может возникнуть несколько проблем. как и моя, скажем, хотя ваша команда для импорта верна, вы не сможете успешно импортировать желаемые файлы, которые доступны внутри таких именованных папок.
Недопустимые имена папок:
допустимые имена папок для выше:
Какую ошибку я сделал:
рассмотрите файловую структуру.
Что я хотел сделать?
Какую команду я сделал?
from Core.Generic-Class-Folder.targetClass import functionExecute
SyntaxError: invalid syntax
Пробовал много поисков и просмотрел много вопросов о stackoverflow и не смог решить, что пошло не так. Я перепроверил свои файлы несколько раз, я использовал
__init__.py
файл, вставил путь к среде и очень волновался, что пошло не так ...И спустя долгое время я понял это во время разговора со своим другом. Я немного глуп, чтобы использовать такие соглашения об именах. Я никогда не должен использовать пробелы или специальные символы для определения имени какой-либо папки или файла. Итак, это то, что я хотел передать. Хорошего дня!
(извините за огромный пост по этому поводу ... просто отпустите мои разочарования .... :) Спасибо!)
источник
Задайте переменную среды PYTHONPATH. Например, PYTHONPATH =.: .. (для семейства * nix).
Также вы можете вручную добавить свой текущий каталог (в вашем случае src) в pythonpath:
источник
Допустим, ваш проект структурирован следующим образом:
Внутри
run.py
вы можете импортировать первый и второй скрипты:Теперь, все еще внутри
run.py
, вы сможете вызывать их методы с помощью:источник
Просто создайте пустой файл ___init____.py и добавьте его в корень, а также во все подкаталог / папку вашего приложения python, где у вас есть другие модули python.
источник
Были проблемы, даже когда init .py существовал в подпапке, и все, что не хватало, это добавление `` как '' после импорта
источник