gpt4 book ai didi

Python3 - 如何正确地进行绝对导入并让 Pylint 开心

转载 作者:太空宇宙 更新时间:2023-11-03 12:01:17 26 4
gpt4 key购买 nike

我在尝试理解 Python 3 导入时遇到了很大的麻烦(我使用的是 Python 3.5)。这似乎是一个值(value)百万美元的问题,而且我知道它已在各处得到解答。但是,我并没有真正理解应该如何完成事情;网上的答案千差万别。如果这是一个几乎重复的答案,请提前道歉。我非常感谢对优秀阅读 Material 的引用。

所以我有以下虚拟项目:

/my_project/main.py
/my_project/lib/__init__.py
/my project/lib/my_lib.py

如果可能的话,我想:

  • 能够将我的程序作为 python3 main.py 运行,并将 my_project 作为当前工作目录。
  • 任何时候都不要修改 PYTHONPATH
  • 让 pylint 开心。
  • 使用正确的 Python3 导入。

main.py 包含:

from .lib.my_lib import foo

if __name__ == '__main__':
foo()

foo 相应地定义在 lib/my_lib.py

通过该配置,我得到:

SystemError: 父模块 '' 未加载,无法执行相对导入

我可以通过导入来绕过这个错误:

from lib.my_lib import foo

但是 1) 这不是 Python3 绝对导入,对吧? 2) Pylint 提示:Unable to import 'lib.my_lib' (import-error)

接下来我尝试添加一个 my_project/__init__.py,然后像这样导入:

from my_project.lib.my_lib import foo

在这种情况下,pylint 很高兴,但我无法运行:python3 main.py:ImportError: 没有名为“my_project”的模块

然后我可以运行它的唯一方法是从父目录作为一个模块:python3 -m my_project.main

所以我的问题是:是否有可能以正确的方式进行导入,同时仍然能够将其作为 python3 main.py 执行?

非常感谢!

最佳答案

我会做类似的事情:

/path/README
/path/requirements.txt
/path/cleverappname/__main__.py
/path/cleverappname/__init__.py
/path/cleverappname/foo.py
/path/cleverappname/bar.py

假设您在 __init__.py 中有类似 class CleverName(object) 的东西,在 中有类似 class Foo(object) 的东西foo.py(bar 也一样,你明白了)。

__main__ 中:

from cleverappname import CleverName
from cleverappname.foo import Foo
from cleverappname.bar import Bar

但是,它需要您将它用作 python 而不是脚本(这是正确的,因为它就是这样):python3 -m clevername

Pylint 似乎对此很高兴。

关于Python3 - 如何正确地进行绝对导入并让 Pylint 开心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47939524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com