docker 远程连接 文件看不到_在VS Code中进行远程Python开发

3782b1165746675d7975dc50c3f2b8e8.png

今天在PyCon 2019大会上,微软的Python和Visual Studio Code团队宣布了在Visual Studio Code中进行远程开发这一功能,这让Visual Studio Code开发者可以远程地在运行在docker容器、远程SSH主机和Linux的Windows 子系统中的开发设置环境中运行他们的代码和工具,而你仍然可以在本地获得丰富和无缝的用户体验。

这项支持目前在Visual Studio Code内部构建版本中是可用的,并由Visual Studio Code市场中的三个新远程扩展启用:

  • Remote-Containers:  在本地docker容器内运行的工作区中进行开发

  • Remote-SSH: 通过一个SSH连接来在运行在远程主机上的工作区中进行开发

  • Remote-WSL: 在Windows中的Linux子系统内运行的工作区中进行开发 

要开始下载这个远程扩展包,请查看Visual Studio Code Remote文档,然后立即开始! 快速查看下面的视频进行浏览,并继续阅读了解更多!

能够使用WSL和远程Python解释器一直是我们的Python Extension GitHub页面上请求最多的特性。我们从Python用户那里听说了许多需要在远程工作区中工作的不同原因: 在使用SSH的情况下,他们的代码需要访问大量数据、计算、GPU或其他资源; 使用Docker时,他们需要能够在具有复杂依赖关系的开发环境之间进行创建和切换; 使用WSL时,他们可能需要只适用于Linux环境的工具和包。

通过远程开发,我们已经使用远程Python解释器和其他工具启用了所有这些场景及其他场景:  Visual Studio Code的UI运行在你的本地机器上,并连接到一个远程托管你扩展的远程服务器。这也启用了自动补全、调试、终端、源代码控制、安装扩展等功能,几乎Visual Studio Code中的所有内容都可以在远程机器上无缝运行,你就像在本地开发工作区工作一样。

远程Docker工作区和Dev容器

Docker容器是创建可重用开发环境的一种流行方法,你无需在本地机器上安装复杂的依赖项。这还允许新的团队成员通过安装docker并在Visual Studio Code中打开你的工作区来复制你的环境。

 “Remote - Containers”扩展允许Visual Studio Code使用dev容器的概念在此开发环境中无缝运行。Dev容器由一个.devcontainer文件夹中的文件定义,它会告诉Visual Studio Code如何为该工作区创建一个Docker环境。你可以使用一个Dockerfile来创建一个单个容器或一个运行多个容器的docker-compose.yml。

要开始在docker容器中进行开发,请运行Remote-Containers: Open Folder in Containers…命令,然后浏览到本地机器上的一个文件夹。如果在工作区根目录中找到一个.devcontainer文件夹,Visual Studio Code将使用现有的dev容器定义来创建该dev容器。

如果容器定义不存在,系统将提示你为该工作区创建一个新的dev容器。我们为Python开发人员提供了内置定义,让你可以从Python 2/3、Python3+Postgres、Miniconda和Anaconda开始:

d251a0a9cc575a0586b6d1d2ac41284f.png

一旦你打开一个dev容器,Visual Studio Code将创建该docker镜像,然后安装一个轻量级远程服务器,瞧,你现在就可以在dev容器中编码了! 远程服务器允许Visual Studio Code远程地运行扩展,这样几乎所有的功能都会像在本地环境中一样工作。

你的文件是以卷挂载到容器中的,所以你可以打开文件,开始编辑代码,并获得智能感知和自动完成:

2ccc8928a8b199a44b962327e31d8a9a.png

你可以开始调试,设置断点,并逐步运行代码:

270de9c1ba0ae6a2fef3b0137166bc7a.png

你可以在Python互动窗口中运行单元格和查看图形输出:

6c52c72a1b58fb7c5cb5cf4975021545.png

并且当你打开终端时,你使用的是容器内的终端!

0c63cf5906fab639f894fefed83da67d.png

除了创建和使用dev容器定义,你还可以使用Docker扩展,并在一个容器上右击,选择Attach Visual Studio Code来将Visual Studio Code附加到任何运行的docker容器上:

41af8e9ef935a257a52d3e1109577c34.png

当附加到一个现有容器时,你可能会丢失Visual Studio Code使用的一些依赖项,因此如果你遇到问题,请检查我们的vscode-dev-containers 仓库中的示例容器定义,以便将依赖项添加到你的Dockerfile。

如果你想返回到正常的本地视图,你可以运行Remote-Containers: Reopen Folder Locally命令。你的所有更改都将通过一个卷挂载驱动器保存到你的工作区,因此可以在本地视图中使用。

远程 SSH 工作区

Python开发人员的另一个常见设置是,他们的开发环境运行在远程机器上,这通常是因为远程机器可以访问本地机器上不可用的资源或数据集。与docker场景类似,你可以使用“Remote-SSH”扩展在一个SSH连接上打开远程工作区。

开始之前,首先确保你可以从命令行ssh到远程机器,然后运行Remote-SSH: New Window命令,并输入你的目标ssh主机:

6755e5f7b121bf915e2e64c747685e15.png

如果你配置了SSH主机,它们将随时在远程SSH活动栏可用,以便轻松连接:

fc224e1a99fe08d0722cdb78affbf421.png

Visual Studio Code将重新打开,然后在SSH主机上安装远程服务器。然后,你可以在这个远程机器上打开一个文件夹:

3f66b05a1a5f69cff4e8a4157b994291.png

然后你就可以立即开始编辑和调试代码了! 在这种情况下,任何源代码都不需要是本地的,所有编辑和调试功能都由远程服务器提供。

4c1a844ed16ade5435ca978cb3f958b9.png

远程WSL 工作区

Linux的Windows子系统允许你运行Windows中运行的本机Linux bash shell,类似于其他场景。“Remote-WSL”扩展允许Visual Studio Code UI在你的windows桌面运行,而Visual Studio Code 远程服务器则在Linux子系统中运行扩展。

要开始使用Remote WSL,请运行Remote-WSL: New Window命令:

5d613f9075566c0aee46c2a2881795ba.png

然后,它将安装Visual Studio Code远程服务器,并为你提供一个运行在WSL上下文中的新的Visual Studio Code窗口。

你可以点击Open Folder...,它会允许你在这个Linux文件系统中打开一个文件夹:

1183c441ac356f432cbab8fc69795c34.png

或者,你可以通过从wsl提示符输入“code-insiders .”命令来直接在WSL中打开一个文件夹。

然后,你就可以像在其他远程开发环境中一样来创建文件、编辑代码、打开WSL终端和进行调试:

506d74de8356f3782d84095c2c35e857.png

现在开始吧

我们对这次更新为Python开发人员在Visual Studio Code中解锁的功能感到兴奋,要使用这些功能,请查看Visual Studio Code Remote文档,并/或试用我们的一些示例应用程序:

  • Python hello world 示例

  • 推特应用程序: Django + Postgres

  • Anaconda 容器

请记得在我们的vscode-remote-release GitHub页面上提交问题,让我们知道关于远程扩展的任何问题或反馈。

英文原文: https://devblogs.microsoft.com/python/remote-python-development-in-visual-studio-code/  译者: 好酒不上头
<think>好的,我现在需要解决用户在远程调试时遇到的路径映射问题,特别是目录/mnt/e/下载/pinns-tf2-main/pinns-tf2-main/examples/navier_stokes缺失的情况。用户希望正确配置路径映射以支持调试。 首先,我得理解路径映射在远程调试中的作用。路径映射通常用于将本地开发环境的文件路径与远程服务器或容器中的路径对应起来,这样调试器就能正确找到源代码。如果路径配置错误,调试器可能无法定位文件,导致错误,比如用户提到的目录缺失问题。 接下来,我需要考虑不同的开发环境和工具,因为不同的IDE和调试工具配置方法不同。例如,VS Code、PyCharm、Docker等都有各自的配置方式。此外,可能还需要检查远程服务器上的实际路径是否存在,或者是否有权限问题。 用户提到的具体路径是/mnt/e/下载/pinns-tf2-main/pinns-tf2-main/examples/navier_stokes。这个路径看起来像是本地Windows系统通过WSL挂载的路径,而远程环境可能是Linux系统。因此,可能存在路径大小写不一致的问题,或者路径结构在远程服务器上不同。 我需要分步骤思考解决方案: 1. **验证远程路径存在性**:首先确保远程服务器上该路径确实存在。用户可能误写了路径,或者在同步代码时目录结构发生了变化。比如,检查是否有多余的pinns-tf2-main子目录重复,或者目录名大小写是否正确。 2. **配置IDE的路径映射**:以常用的VS Code为例,在远程SSH调试时,需要在.vscode/settings.json或launch.json中设置pathMappings。例如,将本地的E:\下载\...映射到远程的对应路径,可能需要转换路径格式,比如将反斜杠改为正斜杠,并处理大小写。 3. **Docker环境中的路径映射**:如果使用Docker,需要在运行容器时使用-v参数挂载本地目录到容器内的指定路径,确保容器内的路径与代码中的引用一致。 4. **符号链接处理**:如果远程路径无法直接修改,可以考虑创建符号链接,将实际的存储路径链接到代码期望的路径。 5. **调试工具配置检查**:例如,在PyCharm中,需要确保Deployment配置正确,自动上传代码到远程的正确位置,并且在运行配置中设置正确的路径映射。 6. **环境变量和硬编码路径**:检查代码中是否有硬编码的路径,考虑替换为相对路径或通过环境变量动态获取,以增强可移植性。 7. **权限问题**:确保远程服务器上的目录有适当的读取和执行权限,避免因权限不足导致路径无法访问。 可能还需要考虑用户的具体环境,比如是否使用版本控制工具同步代码,或者CI/CD流程中的路径问题。此外,日志输出和调试信息可以帮助定位路径错误的具体位置。 最后,生成相关问题,帮助用户进一步排查其他潜在问题,如权限问题、环境变量配置、不同IDE的具体设置方法等。</think>### 路径映射问题解决方案 #### 1. **验证远程路径存在性** - **步骤**:通过SSH登录远程服务器,执行以下命令检查路径是否存在: ```bash ls -l /mnt/e/下载/pinns-tf2-main/pinns-tf2-main/examples/navier_stokes ``` - **可能的问题**: - 路径重复(如`pinns-tf2-main`出现两次),需调整为`/mnt/e/下载/pinns-tf2-main/examples/navier_stokes`。 - 路径大小写问题(如`navier_stokes`与`Navier_Stokes`),需统一命名[^3]。 #### 2. **配置VS Code远程调试路径映射** - **操作**:在项目`.vscode/launch.json`中添加`pathMappings`字段: ```json { "configurations": [{ "name": "Python: Remote Debug", "type": "python", "request": "attach", "pathMappings": [ { "localRoot": "E:/下载/pinns-tf2-main", // 本地Windows路径 "remoteRoot": "/mnt/e/下载/pinns-tf2-main" // 远程Linux路径 } ] }] } ``` - **注意**:Windows路径需转换为Linux格式(如`E:\`→`/mnt/e/`),且需保证路径层级一致[^1]。 #### 3. **Docker容器路径挂载** - **命令示例**: ```bash docker run -v /本地路径/pinns-tf2-main:/mnt/e/下载/pinns-tf2-main -it your_image ``` - **说明**:将本地代码目录挂载到容器内相同路径,避免路径硬编码问题。 #### 4. **符号链接简化路径** - **执行命令**: ```bash ln -s /实际存储路径/pinns-tf2-main /mnt/e/下载/pinns-tf2-main ``` - **作用**:若远程存储路径不同,可通过符号链接指向代码期望的路径。 #### 5. **检查PyCharm远程部署配置** - **步骤**: 1. `Tools > Deployment > Configuration`,确保代码自动同步到远程服务器。 2. 在`Run/Debug Configurations`中,设置本地与远程路径映射: ``` Local Path: E:\下载\pinns-tf2-main Remote Path: /mnt/e/下载/pinns-tf2-main ``` #### 6. **代码中替换硬编码路径** - **修改建议**:将绝对路径改为相对路径或动态获取: ```python import os base_dir = os.path.dirname(os.path.abspath(__file__)) target_path = os.path.join(base_dir, "examples/navier_stokes") ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值