Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python中的其他脚本导入_Python_Python 3.x_Import - Fatal编程技术网

从Python中的其他脚本导入

从Python中的其他脚本导入,python,python-3.x,import,Python,Python 3.x,Import,我的目录如下: isds: __init__.py jobs: __init__.py adhoc: __init__.py test.py test2.py 我的两个文件看起来像这样 test.py: import sys x = 10 test2.py: import sys from isds.jobs.adhoc.test import * print(x) 当我从与test2.py相同的目录运行“

我的目录如下:

isds:
__init__.py
    jobs:
    __init__.py
        adhoc:
        __init__.py
        test.py
        test2.py
我的两个文件看起来像这样

test.py:

import sys

x = 10
test2.py:

import sys
from isds.jobs.adhoc.test import *

print(x)
当我从与test2.py相同的目录运行“python3 test2.py”时,我得到了以下错误:ModuleNotFoundError:没有名为'isds.jobs.adhoc.test'的模块

为什么会这样?我有init.py文件,我想我的绝对导入语句是正确的。。。但也许不是


谢谢

由于您是从同一目录导入模块,因此只需使用导入即可

from test import *

若要作为包导入,则需要将文件作为包运行,以便导航到包含isds`的文件夹并运行:

python -m isds.jobs.adhoc.test2
这会将文件作为模块而不是脚本运行,并且由于它在使用自己的导入的同一级别上被索引,因此您使用的导入机制将按预期工作

如果要支持作为脚本运行或作为模块运行,则需要以下内容:

try:
    from isds.jobs.adhoc.test import *
except ModuleNotFoundError:
    from test import *
但这可能会导致其他问题,如如果发生另一个模块未找到错误,然后
导入测试
最终导入其他内容,您可能会收到混淆和误导性的错误消息,因此,如果您正在编写软件包,我通常建议您使用
-m
标志运行所有内容


还请注意,此方法在python
3.7,4
中不使用任何
\uuu init\uu.py
文件。我认为,添加空init文件的要求在不久前就被删除了。

因为Python没有理由考虑父<代码> ISDs<代码>目录作为查找模块或包的地方。您应该使用相对导入从同一个包中获取代码。这是否回答了您的问题?为什么不使用来自测试导入的
*
,因为它位于同一个目录中呢?是的,{from test import*}确实有效!所以,我知道问另一个问题不是最好的礼仪,但我是在推断我所面临的真正问题:假设test2.py位于这里:“isds.jobs2.adhoc2.test2.py”,并假设应该存在init.py文件。导入语句不应该是“from isds.jobs.adhoc.test import*”吗?我仍然收到与前面报告的错误相同的错误。@fjjones88使用
-m
标记作为接受答案的一部分,给出了运行此操作的“正确”方式。我已在此处发布了特定用例作为答案,如果您有任何进一步的问题或澄清,请随时对我的答案进行评论。很好!成功了。所以,假设test2.py位于这里:“isds.jobs2.adhoc2.test2.py”,并假设应该存在init.py文件。导入语句不应该是“from isds.jobs.adhoc.test import*”吗?我仍然得到与前面报告的相同的错误。Python在import语句中使用相对路径。因此,如果您是从isds的父目录运行该文件。然后必须给出完整的路径,如isds.jobs2.adhoc2.test2