在Python中,从其他目录导入失败

在Python中,从其他目录导入失败,python,python-3.x,python-3.6,Python,Python 3.x,Python 3.6,我读到,要使用python文件作为导入模块,我需要将_init__u;.py放在目录中 我有以下目录结构: data_load -- __init__.py -- rand_data.py etc -- __init__.py -- test.py 在test.py中,我导入了一个在rand_数据中定义的类,得到了错误: python test.py Traceback (most recent call last): File "test.py",

我读到,要使用python文件作为导入模块,我需要将_init__u;.py放在目录中

我有以下目录结构:

data_load
    -- __init__.py
    -- rand_data.py

etc 
    -- __init__.py
    -- test.py
在test.py中,我导入了一个在rand_数据中定义的类,得到了错误:

python test.py 
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    from data_load.rand_data import RandData
ModuleNotFoundError: No module named 'data_load'

更改为etc的父目录,并加载和键入数据

python -m etc.test
这应该可以完成任务

这里是一个小测试用例,假设您在linux机器上

## create the test case
mkdir -p import_issue/data_load import_issue/etc
touch import_issue/data_load/__init__.py import_issue/etc/__init__.py
echo 'print("I am", __name__)' > import_issue/etc/test.py
echo 'from data_load.rand_data import RandData' >> import_issue/etc/test.py
echo 'print("Randdata = ", RandData)' >> import_issue/etc/test.py
echo "class RandData:" > import_issue/data_load/rand_data.py
echo '    pass' >> import_issue/data_load/rand_data.py
#
# now perform the test
cd import_issue
python -m etc.test
您最初的示例中的事情没有按预期进行的原因是,您当前的工作目录可能是等 如果在etc中加载一个python脚本,那么它会尝试导入相对于当前工作目录etc的load_数据,etc下面没有名为rand_data的目录,该目录中有一个文件uu init_u.py

我建议修复的是转到公共父目录,这将是您当前的工作目录,并将etc/test作为一个模块导入。 原因是test.py位于带有init.py的目录etc中,因此您应该将其作为etc.test导入,而不是直接调用它。
不建议直接使用etc/test.py调用一个文件(即模块),这会引起一些罕见的混乱情况。

不要在etc目录python test.py中运行命令,而是在etc的父目录中运行python脚本并加载数据

ie你们需要在终端中做的是考虑你们仍然在终端中的etc目录中

1.    `cd ..`
2.    `python etc/test.py`
这会奏效的

您之所以会遇到错误,是因为在test.py中,python正在当前目录中查找数据加载模块,而由于etc目录中没有数据加载模块,所以会出现此错误

如何解决上述问题

在代码中追加sys.path 从包含所有包、python模块和脚本的project主文件夹运行脚本。
您正在使用的任何特定ide?@prashantrana不只是一个conda安装+终端请在单词uu init_uuuuuy.py前后打勾`如果不是,人们只会看到init.py的粗体字扫描您告诉您如何测试功能我在我的答案中添加了一个测试用例,它可以正常工作。如果它对您不起作用,那么必须有一个差异/一个细节,使您的场景表现不同。您尝试提供最小的可能的测试用例,并将其发送给我们。