无法使用相对导入访问模块
not able to access the modules using relative imports
我的文件夹结构如下
mypackage/
__init__.py
package1/
__init__.py
module1.py # has ClassOne
module2.py # has ClassTwo
script.py
package2/
__init__.py
module3.py # has ClassThree
module4.py # has ClassFour
在 script.py
中,我想从 module4
访问 ClassFour,所以我使用如下所示的相对导入
from ..module4 import ClassFour
c = ClassFour()
但我遇到了错误
ValueError: attempted relative import beyond top-level package
我知道我可以使用
解决这个问题
import sys
sys.path.append("path/to/my/module/")
但我对相关导入的解决方案很感兴趣。
我提到了几个问题并尝试了类似的解决方案
- How to do relative imports
并且还尝试运行我的文件使用
python -m script
但没有成功
你只需要在调用 module4 之前调用 package2,
from ..package2.module4 import ClassFour
因为使用单个 .. 你可以跳出 package1 但无法访问 package2 及其文件。
例如,您可以查看以下结构。
调用文件内容:
package1/module2.py contains a function, function1.
package2/__init__.py contains a class, class1.
package2/subpackage1/module5.py contains a function, function2.
您可以这样将 class1 和 function2 导入到 package2/module3.py 文件中:
from . import class1
from .subpackage1.module5 import function2
如需更多参考,您可以访问此 link:Reference
要运行你的包内的脚本你可以这样做:
python -m mypackage.package1.script
如果您没有安装包(例如通过 pip),那么您需要从 mypackage
的父目录调用该命令(否则任何目录都可以)。
为此,您还需要更正您正在使用的导入。目前 ..module4
不指向现有模块。相反,它应该是
from ..package2.module4 import ClassFour
或者,如果您在 package2/__init__.py
中导入了 ClassFour
,那么您还可以:
from ..package2 import ClassFour
我的文件夹结构如下
mypackage/
__init__.py
package1/
__init__.py
module1.py # has ClassOne
module2.py # has ClassTwo
script.py
package2/
__init__.py
module3.py # has ClassThree
module4.py # has ClassFour
在 script.py
中,我想从 module4
访问 ClassFour,所以我使用如下所示的相对导入
from ..module4 import ClassFour
c = ClassFour()
但我遇到了错误
ValueError: attempted relative import beyond top-level package
我知道我可以使用
解决这个问题import sys
sys.path.append("path/to/my/module/")
但我对相关导入的解决方案很感兴趣。
我提到了几个问题并尝试了类似的解决方案 - How to do relative imports
并且还尝试运行我的文件使用
python -m script
但没有成功
你只需要在调用 module4 之前调用 package2,
from ..package2.module4 import ClassFour
因为使用单个 .. 你可以跳出 package1 但无法访问 package2 及其文件。
例如,您可以查看以下结构。
调用文件内容:
package1/module2.py contains a function, function1.
package2/__init__.py contains a class, class1.
package2/subpackage1/module5.py contains a function, function2.
您可以这样将 class1 和 function2 导入到 package2/module3.py 文件中:
from . import class1
from .subpackage1.module5 import function2
如需更多参考,您可以访问此 link:Reference
要运行你的包内的脚本你可以这样做:
python -m mypackage.package1.script
如果您没有安装包(例如通过 pip),那么您需要从 mypackage
的父目录调用该命令(否则任何目录都可以)。
为此,您还需要更正您正在使用的导入。目前 ..module4
不指向现有模块。相反,它应该是
from ..package2.module4 import ClassFour
或者,如果您在 package2/__init__.py
中导入了 ClassFour
,那么您还可以:
from ..package2 import ClassFour