3

第 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 函数,如果 __ name __ == __ main __ 则执行该函数,因此命令“python3 file.py”应该能够处理“file”= main/site/math的所有导入。

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

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

需要什么导入语句?

试试 1)

所有文件都在同一个目录中

主文件

import site, math

网站.py

import math

问题:改为导入标准库。

试试 2)

site.py 和 mathtools.py(在本例中重命名 math.py)位于包含 main.py 的目录的子目录“include”中

主文件

import include.site, include.mathtools

网站.py

import mathtools

问题:虽然 site.py 可以毫无问题地运行,但运行 main.py 时,“import mathtools”语句会导致未知模块。

试试 3)

site.py 和 math.py 位于包含 main.py 的目录的子目录“include”中

主文件

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

网站.py

import math

问题:虽然尝试 2 中的问题已解决,但仍然存在冲突,因为数学与标准库混淆了。

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

提前谢谢你!

4

1 回答 1

1

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

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

例如,调用的函数在目录output_file中的脚本中,运行时会输出一个调用的文本文件。如果您直接从脚本运行该函数,它会将文本文件输出到. 如果您要导入到根目录中的脚本并调用该函数,它会将文件输出到根目录。test1.pytests/test1.pytest1.txttest1.py/tests/test1.txttest1.py

**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)

所有导入语句的执行就像您从主脚本导入一样(意味着上面的尝试 3,它将导入内置math.py原因site.py,就像它来自根目录一样运行,并且没有绝对路径include/math.py。)

于 2019-05-13T17:04:47.390 回答