1. 项目概述
最近在帮实验室的师弟配置一个农业模拟研究环境,需要同时在办公室台式机和家用笔记本上同步开发。这个环境涉及到VS Code编辑器、Docker容器、gym-dssat仿真平台和GitHub代码托管,配置过程踩了不少坑。今天就把完整的配置流程和避坑指南整理出来,特别适合刚接触这些工具的研究生同学。
这个方案的核心价值在于:
- 通过Docker实现环境隔离和一致性,避免"在我机器上能跑"的问题
- 利用GitHub进行代码版本管理和多设备同步
- 使用VS Code的远程开发功能获得统一的编码体验
- 特别针对gym-dssat这个农业模拟环境做了优化配置
2. 环境准备与工具安装
2.1 基础软件安装
首先在两台电脑上都需要安装以下基础软件:
VS Code:
- 官网下载安装包
- 安装时勾选"添加到PATH"选项
- 推荐安装的扩展:
- Docker
- Remote - Containers
- Python
- GitLens
Docker Desktop:
- Windows系统需要先启用WSL2
- 安装时使用默认配置即可
- 安装完成后在设置中启用"Use Docker Compose V2"
Git:
- 使用默认安装选项
- 安装完成后需要配置全局用户信息:
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"
2.2 WSL2配置(仅Windows)
对于Windows用户,需要额外配置WSL2:
- 以管理员身份打开PowerShell,运行:
wsl --install - 安装完成后重启电脑
- 设置WSL2为默认版本:
wsl --set-default-version 2
注意:如果遇到虚拟化相关错误,需要进入BIOS启用CPU的虚拟化支持(Intel VT-x或AMD-V)
3. Docker环境配置
3.1 创建Dockerfile
在项目根目录创建Dockerfile,内容如下:
FROM python:3.9-slim # 安装系统依赖 RUN apt-get update && apt-get install -y \ build-essential \ gfortran \ libblas-dev \ liblapack-dev \ && rm -rf /var/lib/apt/lists/* # 设置工作目录 WORKDIR /app # 复制requirements文件 COPY requirements.txt . # 安装Python依赖 RUN pip install --no-cache-dir -r requirements.txt # 安装gym-dssat RUN pip install gym-dssat # 暴露端口(如果需要) EXPOSE 8888 # 设置默认命令 CMD ["bash"]3.2 构建Docker镜像
在包含Dockerfile的目录下运行:
docker build -t gym-dssat-env .构建完成后,可以使用以下命令验证:
docker run -it --rm gym-dssat-env python -c "import gym_dssat; print(gym_dssat.__version__)"4. VS Code远程开发配置
4.1 连接到容器
- 在VS Code中安装"Remote - Containers"扩展
- 按下
F1,选择"Remote-Containers: Attach to Running Container" - 选择刚刚创建的
gym-dssat-env容器
4.2 配置开发环境
在容器中打开终端,安装必要的开发工具:
apt-get update && apt-get install -y git vim然后配置VS Code设置(.vscode/settings.json):
{ "python.pythonPath": "/usr/local/bin/python", "python.linting.enabled": true, "python.linting.pylintEnabled": true, "python.formatting.provider": "autopep8" }5. GitHub同步配置
5.1 创建GitHub仓库
- 在GitHub上创建新仓库
- 初始化本地仓库:
git init git remote add origin https://github.com/yourusername/yourrepo.git
5.2 配置.gitignore
创建.gitignore文件,内容至少包含:
.vscode/ __pycache__/ *.pyc *.pyo *.pyd .DS_Store .env5.3 多设备同步工作流
在设备A上完成工作后:
git add . git commit -m "commit message" git push origin main在设备B上获取最新更改:
git pull origin main
6. 常见问题与解决方案
6.1 Docker构建失败
问题:构建时出现gfortran相关错误
解决:
- 确保Dockerfile中包含了
gfortran和build-essential的安装 - 尝试使用更大的基础镜像,如
python:3.9而不是slim版本
6.2 VS Code无法连接到容器
问题:连接时出现权限错误
解决:
- 将用户添加到docker组:
sudo usermod -aG docker $USER - 重启docker服务:
sudo systemctl restart docker
6.3 gym-dssat导入错误
问题:ImportError: libgfortran.so.3: cannot open shared object file
解决:
- 在Dockerfile中添加:
RUN apt-get install -y libgfortran3 - 重新构建镜像
7. 高级配置技巧
7.1 使用Docker Compose
对于更复杂的项目,可以使用docker-compose.yml:
version: '3.8' services: app: build: . volumes: - .:/app ports: - "8888:8888" tty: true stdin_open: true7.2 配置开发容器
创建.devcontainer/devcontainer.json:
{ "name": "gym-dssat", "build": { "dockerfile": "../Dockerfile" }, "settings": { "python.pythonPath": "/usr/local/bin/python" }, "extensions": [ "ms-python.python" ] }7.3 性能优化
- 对于大型数据集,使用Docker卷(volumes)而不是直接绑定挂载
- 在Windows上,将项目目录放在WSL文件系统中(如
\\wsl$\Ubuntu\home\user\project) - 为Docker分配更多资源(内存至少4GB,CPU至少2核)
8. 实际应用示例
8.1 运行gym-dssat示例
在容器中创建一个测试脚本test_gym.py:
import gym import gym_dssat env = gym.make('GymDssat-v0', run_dssat_location='/path/to/dssat', cultivar_file='/path/to/CULFILE.CUL', soil_file='/path/to/SOIL.SOL', weather_file='/path/to/WEATHER.WTH') observation = env.reset() for _ in range(1000): action = env.action_space.sample() observation, reward, done, info = env.step(action) if done: observation = env.reset() env.close()8.2 调试配置
在VS Code中配置调试(.vscode/launch.json):
{ "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", "args": [] } ] }9. 多设备同步最佳实践
数据文件管理:
- 将大型数据文件存储在云存储(如OneDrive、Google Drive)
- 使用
dvc管理数据版本
环境一致性:
- 定期导出Docker镜像:
docker save -o gym-dssat-env.tar gym-dssat-env - 在另一台设备上导入:
docker load -i gym-dssat-env.tar
- 定期导出Docker镜像:
VS Code设置同步:
- 使用VS Code的设置同步功能
- 或手动备份
.vscode/settings.json
10. 实用技巧与心得
容器清理:
# 删除所有停止的容器 docker container prune # 删除所有未使用的镜像 docker image prune -a快速重建环境:
docker-compose down && docker-compose up --build性能监控:
docker stats个人经验:
- 在Dockerfile中使用明确的版本号(如
python==3.9.7) - 定期提交容器内的更改到GitHub
- 使用
docker system df查看磁盘使用情况 - 对于gym-dssat,确保所有输入文件路径在容器内有效
- 在Dockerfile中使用明确的版本号(如
这套配置方案在我们实验室已经稳定运行了半年多,最大的优势是新人加入项目时,只需要安装Docker和VS Code,然后克隆仓库就能立即开始工作,完全跳过了痛苦的环境配置过程。特别是在跨设备工作时,所有环境都保持一致,再也不用担心"在我机器上能跑"的问题了。