跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 问个好基础的 import 路径问题
未分類
26 6 月 2020

问个好基础的 import 路径问题

问个好基础的 import 路径问题

資深大佬 : imn1 9

目录结构
folder:
–common.py
–A
—-__init__.py 0 字节空文件
—-a.py
–B
—-__init__.py 0 字节空文件
—-b.py
就是 folder 为根目录,A 和 B 是 folder 的子目录

common.py 里面
from A import …
…
解释一下,common 会被多个模块调用,算是前置,它部分内容从 A.a 获取并计算

b.py 里面
import sys
sys.path.append(‘..’)
from common import …
…
if __name__ == ‘__main__’:
…

现在情况:
folder> py ./B/b.py
“找不到 commn 模块,b.py 第 n 行”
B> py ./b.py
“找不到 A 模块,common.py 第 n 行”

暂时用其他方案是解决了,但想知道:
1.b.py 能否直接运行?
2.这种情况,b.py 该怎么写 import ?

大佬有話說 (5)

  • 資深大佬 : xiaolinjia

    b.py 里要写

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

    相当于将 folder 加入到 Python 路径下。

  • 資深大佬 : Vegetable

    这个做法不是一个很好的习惯,但是写代码难免会遇到。
    1 的代码时正确的,不过我更喜欢用这种写法

    from pathlib import Path
    import sys
    sys.path.append(Path(__file__).parent.parent.absolute().__str__())

    from common import *

    这样的代码非常的 dirty,排序引用时会破坏代码结构,看起来也很乱。

    记住一个核心,把项目的根目录的绝对路径加入到 path 中就行了。

  • 主 資深大佬 : imn1

    @Vegetable
    @xiaolinjia
    就是说导入绝对路径么?这么说我懂了,谢谢

    我另外一些模块是用绝对路径导入的,只是那些模块是多个项目可用的
    单个项目内也用绝对路径,这个是没转过弯来

  • 資深大佬 : JCZ2MkKb5S8ZX9pq

    这个我一开始也绕过。

    现在是项目相关的走根目录,比如 from config import *

    自有通用工具都放一个目录,比如 util,加到 path 。
    然后 from util.atool import atool

  • 資深大佬 : JCZ2MkKb5S8ZX9pq

    另外模块化调用
    folder> py ./B/b.py
    变成
    folder> python -m b.b

    缺点是有时忘了会调用错误,但直接集成到 sublime 的 build 了,就问题不大。而且自那以后,项目结构有改好一点,一开始都平级目录一堆 py……

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具