2 回答
TA贡献1856条经验 获得超17个赞
切换到 etc 和 data_load 的父目录并输入
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 ,如果您在 etc 中加载 python 脚本,那么它会尝试导入相对于当前工作目录 ( etc) 及以下的 load_dataetc没有名为 的目录rand_data,其中有一个文件__init__.py。
我的修复建议是转到公共父目录(这现在将是您当前的工作目录)并将 etc/test 作为模块导入。原因是, test.py 位于带有init .py 的目录 etc 中,因此您应该将其作为 etc.test 导入,而不是直接调用它。不建议直接使用 etc/test.py 调用文件,即模块,并且会引起一些罕见的混乱情况。
TA贡献1875条经验 获得超3个赞
etc
而不是在目录 中运行命令,而是在andpython test.py
的父目录中运行 python 脚本。etc
data_load
即您需要在终端中做的是(考虑到您仍在etc
终端的目录中)
1. `cd ..` 2. `python etc/test.py`
这会奏效。
你为什么会遇到错误是因为在test.py
python 中正在寻找data_load
模块的当前目录,并且由于目录中没有 data_load 模块,etc
所以它给出了这个错误。
如何解决上述问题
在代码中附加 sys.path
从包含所有包和 python 模块和脚本的项目主文件夹运行脚本。
添加回答
举报