Python 使用uu init_uuupy.py不';行不通
我正在尝试一个结构如下的项目:Python 使用uu init_uuupy.py不';行不通,python,visual-studio,visual-studio-code,Python,Visual Studio,Visual Studio Code,我正在尝试一个结构如下的项目: root_folder ├── __init__.py ├── a_folder │ ├── __init__.py │ └── script_1.py ├── b_folder │ ├── __init__.py │ └── script_2.py └── script_3.py 我打开根文件夹上的IDE(VS代码)。我将空的\uuuu init\uuuu.py文件添加到子文件夹和根文件夹中。我还保存所有文件并重新启动IDE 但是,当我尝试在脚
root_folder
├── __init__.py
├── a_folder
│ ├── __init__.py
│ └── script_1.py
├── b_folder
│ ├── __init__.py
│ └── script_2.py
└── script_3.py
我打开根文件夹上的IDE(VS代码)。我将空的\uuuu init\uuuu.py
文件添加到子文件夹和根文件夹中。我还保存所有文件并重新启动IDE
但是,当我尝试在脚本_2
中导入脚本_1
时,出现错误:
# in script_2.py
from a_folder import script_1
ModuleNotFoundError: No module named 'script_1'
我也尝试了很多其他的方法,比如
# in script_2.py
from root_folder.a_folder import script_1
# Or
from .a_folder import script_1
但它们仍然不起作用。我到处都找了,但还是解决不了。你能给我一些提示吗?谢谢大家!
更新
以下是路径的一些打印结果:
# when I try to run script_2 in b_folder
print(os.path.abspath(''))
print(os.getcwd())
---/home/nick/Desktop/root_folder
---/home/nick/Desktop/root_folder
print(sys.path)
---
['/home/nick/Desktop/root_folder/b_folder', '/home/nick/anaconda3/envs/pytorch101/lib/python37.zip', '/home/nick/anaconda3/envs/pytorch101/lib/python3.7', '/home/nick/anaconda3/envs/pytorch101/lib/python3.7/lib-dynload', '/home/nick/anaconda3/envs/pytorch101/lib/python3.7/site-packages']
在导入语句之前,添加以下代码
import sys
sys.path.append("./")
这会将当前路径添加到工作区,然后您可以成功导入模块
这是我的项目截图,与你的文件夹结构相同
[编辑]
我假设您的cwd(当前工作目录)与我的一样位于根目录下。那么sys.path.append(“./”)应该可以工作
现在转到root_项目,在launch.json中添加以下代码:
"env": {
"PYTHONPATH": "${workspaceFolder}",
},
"cwd": "${workspaceFolder}"
Python扩展将搜索根_项目下的模块,您可以直接导入模块:
更多详细信息请参阅和。如果您仍在使用像Jetbrains Pycharm这样的IDE,请将文件夹“
根目录”设置为“源根目录”。如果您使用的是VSC,则可以执行相同的操作。
另一方面:
import sys
sys.path.append('your path')
可以手动将包添加到系统级的环境路径
祝你好运。\uuuuu init\uuuuuy.py
将文件夹定义为一个模块<代码>从\u文件夹导入脚本\u 1
我怀疑您遇到了这样的问题:但我没有足够的信心将VTC作为副本Hi我认为这不是重复的脚本,原因有两个:第一,我尝试运行兄弟脚本,但不是父脚本。比如,如果我尝试运行script_3.py
,那么您的链接就是答案。第二是。。。相对路径和绝对路径在这里都不起作用。。。不过还是非常感谢你的帮助!嗨,莫莉!非常感谢您的回复。我试过你的方法,但不管用。然后我根据你的建议做了一个修改:我使用sys.path.append(“./root\u文件夹”)
。现在可以了!实际上我不知道为什么会发生这种情况,似乎/
和/root\u文件夹
,它们是一样的,对吗?你对此有什么建议吗?谢谢。我想您当前的工作目录不是终端中显示的\xxxx\root\u文件夹。这就是python扩展无法实现它的原因。建议转到当前项目文件夹,我将用第二个选项编辑我的答案,请看一下。谢谢你,莫莉!现在相对路径工作了!我可以再问一个问题吗?似乎我们只需要在这里使用sys.append('./')
,对吗?因为在删除了\uuuu init\uuuuuuuupy
之后,它仍然可以与sys.append
完美地导入。似乎\uuuu init\uuuuu.py
无法在VS代码中将文件夹正确地传输到模块中。我还更新了问题正文中的路径env。请随时检查。非常感谢。它起作用了!谢谢你!我想问一下:\uuuu init\uuuuuuuupy
似乎无法将文件夹正确地转移到模块中,因此让我们跳过这个sys.append
步骤,对吗?因为在我删除了所有的\uuuu init\uuuu.py
之后,它仍然可以与sys.append完美地导入。你有什么建议吗?非常感谢。我还更新了问题主体中的路径env。请随时检查。非常感谢。