Python init.py vs sys.path.append/ins

2024-05-19 02:28:09 发布

您现在位置:Python中文网/ 问答频道 /正文

know那里area tonappendpath-instead-of-sys-path-insert1-path">how-to导入Python modules不在路径中,但是我还没有遇到使用Python的__init.py__vs sys.path.insert。哪种方法更好?这两者都有明显的缺点吗,比如性能?还有一个是“Python”吗

我能想到的一个场景是,我有一个程序,用户可以下载并放在任何目录中,所以我不知道绝对路径(除非我用编程的方法得到它)。文件夹结构是

working dir
    __init__.py
    foo.py
    src/
        my_utils.py
        __init__.py

我看不出使用init.py和更改sys.path之间有什么区别。有没有什么情景你能想到它会有什么不同?

我的问题的第二部分是,为什么要做任何事情才能从子目录导入模块?我对Python还不太熟悉,所以我可能不明白为什么修改路径或创建init文件是样板文件。对我来说,这似乎是不必要的麻烦。如果我在当前的工作目录中有“dir”并说“import dir.my_utils”,我不明白为什么我要列出我想在初始化py中导入的所有内容。

抱歉,如果这是一个副本,但我做了搜索前张贴。

编辑:这里是另一个有用的链接:Automatically call common initialization code without creating __init__.py file


Tags: 文件path方法py路径目录initmy
1条回答
网友
1楼 · 发布于 2024-05-19 02:28:09

python解释器使用init.py将目录视为包。包在避免命名空间冲突方面起着重要作用。如果您从Python Modules中阅读6.4 Packages一节,则有助于防止具有公共名称的目录隐藏稍后在搜索路径中出现的其他有效模块。

因此,包机制简化了导入包的任务。通过使用init.py,您还可以从package.subpackage import *执行类似的操作,如果我们要继续附加到sys.path(实际上,我们必须附加所有可能的模块),这将是困难或乏味的。

至于回答您的问题的第二部分-为什么我们需要做任何事情来将目录视为包-好吧,需要用某种方式告诉python应该允许导入什么和不应该导入什么。此外,如果您在开头导入了所有必需的模块,并且您需要导入的模块已经存在于PYTHONPATH环境变量中,则不需要显式地向sys.path追加任何内容。

希望这个答案能对你的问题有所启发。

相关问题 更多 >

    热门问题