【发布时间】:2019-12-26 14:29:41
【问题描述】:
我的目录结构如下:
py_test
├── __init__.py
├── dir1
│ ├── __init__.py
│ └── script1.py
└── dir2
├── __init__.py
└── script2.py
在script2 我想“import ..\script1”。
我在script2 中尝试过的:
-
不工作
from ..dir1 import script1 ImportError: attempted relative import with no known parent package` -
作品
import sys, os path2add = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir, 'dir1'))) if (not (path2add in sys.path)) : sys.path.append(path2add)
如果我想使用选项 1,最简单(即文件最少)的文件/目录结构是什么?
我知道this,但我想知道是否可以避免创建该目录结构,并且仍然使用type-1 import。
我目前正在使用this workaround,它使用type-2 import。
相关:
How to import a Python class that is in a directory above?
Import a module from a directory (package) one level up
Using importlib to dynamically import module(s) containing relative imports
【问题讨论】:
-
你是如何运行代码的?来自哪个工作目录?
-
@mkrieger1 - 来自
dir2,在 Jupyter 笔记本中。 -
您不能在主脚本(我假设为“script2.py”)的位置上方相对导入。在“py_test”中放置一个主脚本,然后可以导入并运行“script2.py”。
-
当通过任何导入您的
py_test包的模块运行时,它将运行正常。 -
导入包是这样组织的,作为要使用的包导入。因此,从内部执行多个入口点是没有意义的,而且通常它们永远不会(一起)工作。
标签: python import package python-import