Решено, спасибо!
Допустим, у меня есть самописный модуль, расположенный под C:\mymodules\general
, который содержит файлы foo.py
и __init__.py
.
Теперь я хочу импортировать функцию bar()
, которая находится внутри foo.py
, в скрипт в совершенно другом месте.
Почему это не работает?
import sys
sys.path.append(r"C:\mymodules")
from general import foo
foo.bar()
Я получаю ImportError: cannot import name 'foo'
То же самое, если вместо этого добавить C:\mymodules\general
к пути.
В качестве альтернативы я также попытался
import sys
sys.path.append(r"C:\mymodules")
import general.foo
foo.bar()
Здесь я получаюModuleNotFoundError: No module named 'general.foo'; 'general' is not a package
.
Почему бы вообще не быть пакетом?Я думал, что требование «содержит __init__.py
» (и модуль, который я хочу импортировать, конечно)?
Это все Python3, использующий PyDev в Eclipse под Windows7.
Можеткто-нибудь подскажет, что не так и как это сделать вместо этого?
Редактировать: файл, действительно, уже называется __init__.py
, так что это не проблема.
__init__.py
уже содержит строку
__all__ = ["foo"]
Редактировать 2: Как ни странно, следующие работы:
import sys
sys.path.append(r"C:\mymodules")
from general import *
bar()
Я действительно нехочу сделать import *
, хотя.Конечно, должен быть более чистый путь?
Редактировать 3: Когда я запускаю его из IDLE, он работает!(Первый код, то есть.) Но в Eclipse PyDev я все еще получаю ту же ошибку.Почему?
Ах!Решение найдено!(см. ответ ниже, чтобы закрыть это).