第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文件所在的目录中的文件导入,而不是从标准库导入”
事先谢谢你!在
这里最简单的解决方案是不要使用自定义模块来隐藏内置模块,而是使用绝对路径,但无论如何,这可能会帮助您了解更多信息:
Python将从调用它的目录执行导入模块的函数。在
例如,名为
output_file
的函数位于目录tests/test1.py
中的脚本test1.py
,运行时将输出一个名为test1.txt
的文本文件。如果从脚本test.py
运行,它将把文本文件输出到/tests/test1.txt
。如果您随后将test1.py
导入根目录中的脚本并调用该函数,它将以test1.txt
的形式将文件输出到根目录。在所有import语句的执行方式与您从主脚本导入的语句相同(这意味着对于上面的尝试3,它将导入内置的
math.py
,因为site.py
会像从根目录一样运行,并且没有include/math.py
的绝对路径。)相关问题 更多 >
编程相关推荐