【发布时间】:2017-04-01 08:52:07
【问题描述】:
我阅读了很多与我提出的问题相关的答案,但我仍然不明白如何使我正在尝试的这件事成为可能。 所以让我们进入正题。我将报告我的应用程序的简化版本。
假设我有一个名为 project 的 主文件夹,其中有一个 src 主包,其中包含 三个子包:
- clustering(包含一个文件:clustering.py)
- parser(包含一个文件:parser.py)
- support_class(包含一个文件:myClass.py)
每个文件夹中,除了项目一个,都有一个__init__.py
现在,集群和解析器包中包含的 python 脚本应该同时使用 support_class 中包含的 myclass.py。
我尝试了相对导入,但它们不起作用,因为我想直接运行集群和解析器包中包含的脚本,并且不想使用 -m 选项。
Es。 python parser.py [参数]
我使用的相对导入示例是:
from ..supportClass import myClass
我试图将包路径添加到 sys.path 但有些东西不起作用,因为它仍然告诉我它找不到模块。
Es。
sys.path.insert(0, "~/project/src")
from support_class import myClass.py
谁能建议在 python 2.7 中执行此操作的最佳方法? 如果我可以避免使用 sys.path 选项,那就太好了,因为我不太喜欢这个解决方案。
提前致谢。
【问题讨论】:
-
您能告诉我们您是如何尝试使用相对路径的吗?
-
我尝试过,例如在 parser.py 中,执行以下操作:from ..support_class import myClass.py
-
您是直接从其子文件夹运行
parser.py,还是从您的顶级文件夹导入它?编辑:我的错,再次阅读您的问题,您已经提供了该信息。 -
我正在从 parser 文件夹运行 parser.py 并尝试从 parser.py 导入 myClass.py 编辑:不用担心 :)
-
包的设计不是为了让嵌套在其中的子包模块作为主包运行。要使
sys.path.insert(0, "~/project/src")工作,请尝试在第二个参数上使用os.path.expanduser(),然后再将其传递给insert()方法。
标签: python python-2.7 import relative-path absolute-path