繁体   English   中英

为什么Python教程说会加载当前目录下的其他脚本而不是同名库是错误的?

[英]Why does the Python tutorial say it is an error that other scripts in the current directory will be loaded instead of libraries with the same name?

Python 教程第 6 章(模块)说:

包含正在运行的脚本的目录位于搜索路径的开头,在标准库路径之前。 这意味着将加载该目录中的脚本,而不是库目录中的同名模块。 这是一个错误,除非有意更换

为什么这是一个错误? 换句话说,“除非有意进行替换,否则这是一个错误”这句话是什么意思?

初始化后,Python 个程序可以修改sys.path 包含正在运行的脚本的目录位于搜索路径的开头,在标准库路径之前。 这意味着将加载该目录中的脚本,而不是库目录中的同名模块。 除非有意更换,否则这是一个错误。 有关详细信息,请参阅标准模块部分。

假设您安装了一个名为fooo的 package(= 模块)。 这是您要用于 e 脚本的 package。

现在,如果您使用fooo导入它,一切都会按预期进行。

现在,如果上面提到的目录中有一个模块,具有相同的名称 ( fooo ),这个模块将替换您想要的 package。

错误是,您现在导入了错误的 package。

资源: https://docs.python.org/3/tutorial/modules.html#the-module-search-path

它基本上说:如果您覆盖了 python 已经指定的内容,而这不是您的意图,那么这是一个错误。 如果打算覆盖它,则不是错误。

搜索路径是 python 解释器搜索任何导入模块的路径列表。 您可以通过运行python3在交互式 python shell 中查看其内容,然后import sys; print(sys.path) 在终端中import sys; print(sys.path) 对我来说,它看起来像这样:

['', '/usr/lib/python311.zip', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', '/usr/local/lib/python3.11/dist-packages', '/usr/lib/python3/dist-packages']

制作一个包含import sys; print(sys.path) import sys; print(sys.path) ,运行脚本并查看第一个条目从空字符串更改为您的 python 文件所在的路径(也就是您的工作目录):

['/home/thomas/Downloads', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/thomas/.local/lib/python3.10/site-packages', '/usr/lib/python3.10/site-packages']

如果您的 python 脚本还包含import my_module ,执行 python 解释器将首先在您的工作目录中搜索名为my_module.py的文件,只有当它没有找到时才会继续在所有常用位置搜索模块可能安装第三方库的地方。

如果您不小心导入了您自己的模块之一,而不是您通过 pip 安装的同名第三方模块,这可能会导致意外错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM