Python导入:解决当前目录和外部库之间的冲突

2024-09-29 02:29:14 发布

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

第101次有人问这样的问题,但我还是没有找到解决办法:

我有3个python文件:

main.py uses functions from math.py and site.py
site.py uses functions from math.py
math.py works independently

这些文件中的每一个都可以包含一个main函数,如果uName u==uMain_uuu,则会执行一个main函数,因此命令“python3文件.py“应该能够处理'file'=main/site/math的所有导入。在

第二个问题是文件名site和math也是标准库的名称。在

此外,程序应该是可移植的,因为导入不应该包含到其他python文件的绝对路径。在

需要什么导入语句?在

尝试1)

所有文件都在同一目录中

在主.py在

^{pr2}$

在站点.py在

import math

问题:标准库被导入。在

尝试2)

在站点.py以及数学工具.py(重命名数学.py在本例中)位于包含主.py在

在主.py在

import include.site, include.mathtools

在站点.py在

import mathtools

问题:while站点.py“import mathtools”语句将导致未知模块主.py运行。在

尝试3)

在站点.py以及数学.py位于包含的目录的“include”子目录中主.py在

在主.py在

import sys, os 
sys.path.append(os.path.abspath("./include"))
import include.site, include.math

在站点.py在

import math

问题:虽然try2中的问题得到了解决,但是仍然存在一个冲突,因为数学与标准库混淆了。在

我的理想解决方案: 有没有一种简单的方法来声明“从包含此import语句的python文件所在的目录中的文件导入,而不是从标准库导入”

事先谢谢你!在


Tags: 文件pyimport目录标准include站点main
1条回答
网友
1楼 · 发布于 2024-09-29 02:29:14

这里最简单的解决方案是不要使用自定义模块来隐藏内置模块,而是使用绝对路径,但无论如何,这可能会帮助您了解更多信息:

Python将从调用它的目录执行导入模块的函数。在

例如,名为output_file的函数位于目录tests/test1.py中的脚本test1.py,运行时将输出一个名为test1.txt的文本文件。如果从脚本test.py运行,它将把文本文件输出到/tests/test1.txt。如果您随后将test1.py导入根目录中的脚本并调用该函数,它将以test1.txt的形式将文件输出到根目录。在

**Directory path for visual**
├── main.py
├── (if imported and run from main, "test1.txt" is here)
├── tests
│   ├── test1.py
│   ├── (if run from test1 directly, "test1.txt" is here)

所有import语句的执行方式与您从主脚本导入的语句相同(这意味着对于上面的尝试3,它将导入内置的math.py,因为site.py会像从根目录一样运行,并且没有include/math.py的绝对路径。)

相关问题 更多 >