【问题标题】:What is the good way to deal with python import? [duplicate]处理python导入的好方法是什么? [复制]
【发布时间】:2021-01-29 16:59:15
【问题描述】:

我在python3工作了一年了,仍然没有得到导入系统....
我总是将空的 init.py 文件放在每个文件夹中。

但是,如果我的项目开始有嵌套目录(并且它经常附加很多),我必须进行一场战争才能导入 我自己的 模块(python 认为他是谁? ???)...快把我逼疯了。

所以目前我发现的“最佳”技巧,但显然我并不满意,就是将这样的 ligne 放在我的文件顶部:

sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(file))))

我不喜欢它,首先是因为当目录嵌套在多个级别时,行非常长,然后因为我的 linter 总是对我大喊大叫,因为我的导入不在我的文件之上。

所以我想知道,我错过了什么?有我错过的信息吗?你的技术是什么?

谢谢!


Can't import my own modules in Python 有人建议它与此答案相似,但事实并非如此。 首先我不想使用相对导入。
那么 'sys.path.append("..")' 在我看来并不干净,我的导入仍然不在我的文件之上。

基本上假设我有这样的结构:

文件夹_a
----file_1
----文件2
----文件夹_b
--------文件_3
--------文件夹_c
------------file_4

我在 file_3 中从 file_1 实例化一个类,我必须这样做:

sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(文件)))))
从文件夹_a.file_1 导入类_1

这样做显然行不通:

sys.path.append("..")
从文件夹_a.file_1 导入类_1

这对我来说太不合逻辑了

【问题讨论】:

  • 这能回答你的问题吗? Can't import my own modules in Python
  • 我不想进行相对导入,在我的文件顶部添加 'sys.path.append("..")' 似乎对我来说也是一个补丁.. 是'有没有我错过的使用 python 的好方法?
  • @Kimor 请采纳这个建议:使用明确的相对导入。在一个包中,这正是您需要使用的。您阅读的建议几乎肯定是关于在 Python 2 中的相对导入,这些建议并不明确,并且在顶级名称和嵌套名称之间造成了歧义。 Python 3 没有这些问题。

标签: python python-3.x import python-import


【解决方案1】:

如果您不想使用相对导入,并且不想弄乱 sys.path,另一种选择是打包您的模块并使用 pip install 安装它们。

我认为reading the import documentation 而不是仅仅试图“让它发挥作用”将是有益的。 Python 的文档非常好。喝杯好茶集中注意力,然后阅读:)

【讨论】:

    猜你喜欢
    • 2016-07-31
    • 2013-08-24
    • 1970-01-01
    • 2011-09-16
    • 2016-06-12
    • 2021-08-20
    相关资源
    最近更新 更多