对于python实践项目,我有以下目录结构:
.
├── data
├── ds-and-algo
├── exercises
| ├── __init__.py
│ ├── armstrong_number.py
│ ├── extract_digits.py
├── output
extract_digits.py
如下所示:
在armstrong_number.py
中,我有以下内容:
from .extract_digits import extract_digits
如果我运行
python exercises/armstrong_number.py
我得到ModuleNotFoundError: no module named exercises
使用-m
标志运行以下commad可解决此错误:
python -m exercises.armstrong_number
但是使用VSCode
来调试文件,我有以下调试配置launch.json
:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python Module",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"pythonPath": "${config:python.pythonPath}",
"module": "exercises.${fileBasenameNoExtension}",
"cwd": "${workspaceRoot}",
"env": {"PYTHONPATH":"${workspaceRoot}"}
}
]
}
然而,这有几个问题:
1)对于不同的文件夹,例如ds-and-algo
,我必须在启动.json文件调试配置到
"module" : "ds-and-algo.${fileBaseNameNoExtension}"
如果我有嵌套文件夹配置,如:
exercises
├── tough
| | __init__.py
| ├──ex1.py
| ├──ex2.py
├── easy
我再次需要手动编辑launch.json
文件中的调试配置:(考虑子文件夹tough
的情况)
"module": "exercises.tough.${fileBaseNameNoExtension}"
我需要实现一个一般情况,根据正在调试的文件,"module"
文件中的"module"
条目应该是:
"module": "folder1.folder2.folder3.....foldern.script"
就像fileBaseNameNoExtension
,VSCode
有{a1}:
其中一个变量是relativeFile
,它是当前打开的文件相对于workspaceFolder
的路径
所以对于文件ex1.py
,变量relativeFile
将是exercises/tough/ex1.py
。在
我需要操作这个字符串并将其转换为exercises.tough.ex1
,如果我可以在launch.json
文件中的"module"
条目中编写和执行bash命令,这就很简单了。但我做不到。但是,链接predefined variables in VSCode有一节关于命令变量,其中说明:
如果上面的预定义变量不够,可以通过${命令:commandID}语法。
这个链接有很多其他有用的信息。我不是python方面的专家,而且绝对不懂任何javascript,如果这是解决这个问题所必需的。在
没有一种方法可以在
launch.json
中指定希望它计算出要调试的模块是什么。这是因为由于命名空间包允许任何目录代表一个包,所以在技术上不可能100%正确。最好的选择是为每个要在launch.json
中运行的示例创建单独的调试配置(您可以有任意多个)。如果手工操作太繁琐,您可以编写一个Python脚本来为您生成launch.json
。我不能重现你的错误:
ModuleNotFoundError: no module named exercises
。使用以下文件
exercises/extract_digits.py
^{pr2}$exercises/armstrong_number.py
如果使用Python3,请将print语句更改为:
print(armstrong_number(3))
,并更改使用的Python解释器。如果当前目录是项目根目录并且您运行
你在控制台上看到10号
在visualstudio代码中,使用了错误的启动配置。
您只是在运行python程序,所以应该使用
Python: Current File
配置。launch.json
Python: Current File
配置现在构造并运行一个复杂的命令。它将CWD设置为当前文件的目录,并在当前文件上启动调试器。
如果您真的需要启动模块,您可以在VSC中使用
Multi-Root Workspace
,并为每个根目录单独配置launch.json
如果您想使用
${command:commandID}
语法,可以构造一个使用activeTextEditor
的简单扩展名,并根据文件名构造一个字符串编辑
另一个选择是使用多个启动配置。
我删除了默认值起作用或未使用的属性。
您可以使用扩展名Command Variable获得带有点分隔符的相对目录。
我不确定是否要运行bash脚本,尽管如果可以在文件中运行JavaScript,
"ds-and-algo.(${fileBaseNameNoExtension}).split('/').join('.')"
应该可以做到。{{cd2>实际上你不需要在cd2}中有文件。这些文件可能是空的,但是python使用它们来标识模块结构,从而允许嵌套和相对导入。我希望添加这些文件可以让您只运行}
python exercises/armstrong_number.py
或{相关问题 更多 >
编程相关推荐