整理配置开发环境时遇到的坑和解决方案,不定期更新。
配置开发环境
VS Code 配置
VS Code的强大众所周知,搭配上插件足够满足基本上常用的开发需求。在VS Code中使用Interactive Python几乎可以替代很多Jupyter Notebook的功能。
更新:2019/10/09:VS Code新增对Jupyter Notebook的原生支持。
VS Code 插件
这里记录目前使用的插件:
- Python:
Microsoft原生支持的Python插件。 - C++
Microsoft原生支持的C++插件。 - Anaconda Extension Pack
Microsoft对Anaconda的原生拓展,可以更多地对第三方库进行语法高亮,提示等。安装后会同步安装YAML支持,目前还没有使用过,可以先卸载。 - Vim
使用Vim键位,不必多说。 - vscode-icons
优化图标展示,更加醒目直观。 - One Dark Pro
目前用过的最好的配色之一。 - Code Runner
必备品,直接运行常见的语言,编译调试利器。 - Bracket Pair Colorizer
2
彩色显示括号。
已经使用第二版。
用回第一版,在第二版中会导致中文输入极其卡顿。 - GitLens – Git supercharged
最强大的Git插件,搭配VS Code原生Git可以非常爽快的进行版本管理。有时候Gitlens会和outlines冲突,导致outlines无法正常显示,目前问题似乎已经得到修复。 - Markdown All in One
顾名思义。写.md格式文档时的全家桶。支持导出HTML格式。 - TODO Highlight
高亮TODO标签,便于对代码Todo List的识别。(但是似乎不支持XXX的高亮) Todo Tree
树形展示所欲的TODO标签,和TODO Highlight结合使用的效果非常感人。
2019-12-24更新:在Linux下使用该插件后发现Network和Load占用全满,严重影响开发效率,目前暂停使用。已向开发者提交Issue。- C++ Intellisense
C++代码自动补全。 - Include Autocomplete
自动补全C++头文件引用。 - Excel Viewer
可以在VS Code中查看Excel内容,特别是对CSV文件的查看非常友好,甚至能使用筛选等功能。 - Path Intellisense
对文件路径的自动识别。 - LaTeX Workshop
- TabOut
使用Tab跳出括号引号等,不过使用Vim的情况下一般用不到。 - Better Comments
增强Comments的阅读体验。 - TabNine
结合使用者的代码输入量自动联想识别,使用了人工智能算法,但是对内存会有一些消耗。 - markdownlint
提供Markdown写作时格式的静态检查。 - Remote Development
微软原生提供为VSCode进行远程开发的插件,会安装所有远程开发相关的插件,搭配WSL非常好用。 - Monokai Pro
经典Monokai配色,提供多种背景色和独特的文件图标
其他配置
- 优先使用Fira Code字体,同时使用更纱黑体(Microsoft Store提供下载),Consolas, DejaVu Sans Mono, Ubuntu Mono, Cascadia, Hack, Source Code Pro等字体
- 使用flake8 + yapf进行代码检查和格式调整,同时需要关闭pylint
- 设置单行长度120
{
"workbench.colorTheme": "Monokai Pro",
"workbench.iconTheme": "Monokai Pro Icons",
"python.dataScience.sendSelectionToInteractiveWindow": true,
"python.linting.flake8Enabled": true,
"python.linting.flake8Args": ["--max-line-length=120"],
"python.formatting.provider": "yapf",
"python.formatting.yapfArgs":["--style", "{column_limit=120}"],
"python.linting.pylintEnabled": false,
"editor.fontSize": 12,
"editor.rulers": [120],
"editor.fontFamily": "'Fira Code', Consolas, 'Cascadia Code', 'Sarasa Mono SC'",
"editor.fontLigatures": true,
"editor.fontWeight": "bold",
"code-runner.runInTerminal": true,
"code-runner.executorMap": {
"c": "cd $dir && gcc -std=c11 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ -std=c++11 -Wall $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"python": "python -u",
"julia": "julia"
},
"editor.lineNumbers": "relative",
"vim.hlsearch": true,
"vim.statusBarColorControl": true,
"vim.textwidth": 120,
"vim.useSystemClipboard": true,
"workbench.colorCustomizations": {
"statusBar.background": "#005f5f",
"statusBar.noFolderBackground": "#005f5f",
"statusBar.debuggingBackground": "#005f5f"
},
"latex-workshop.view.pdf.viewer": "tab",
"latex-workshop.latex.tools": [
{
// 编译工具和命令
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"%DOCFILE%"
]
},
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "xelatex",
"tools": [
"xelatex"
],
},
{
"name": "pdflatex",
"tools": [
"pdflatex"
]
},
{
"name": "xe->bib->xe->xe",
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
},
{
"name": "pdf->bib->pdf->pdf",
"tools": [
"pdflatex",
"bibtex",
"pdflatex",
"pdflatex"
]
}
]
}
Python
Jupyter Notebook
2021/06更新:现在Jupyter Lab内置了很多Jupyter Notebook中插件的功能,可以全面转向Jupyter Lab。
Jupyter Notebook 插件配置
- Jupyter Notebook安装jupyter_contrib_nbextension扩展功能后不显示Nbextensions标签的解决办法(常用扩展功能说明)
Jupyter Notebook安装jupyter_contrib_nbextension扩展功能后不显示Nbextensions标签的解决办法(常用扩展功能说明)
Jupyter Notebook 远程环境
- 如果需要在远程服务器上打开Jupyter并在本地浏览器界面打开,需要通过SSH隧道使用端口映射,具体方法如下:
- 在本地创建端口映射:
ssh -N -f -L localhost:8888:localhost:8889 -p 22 remote_user@remote_host
。
这里,-N
表示不执行其他命令,仅做端口转发,-f
表示后台运行,-L
表示本地映射转发,选项值代表ssh客户端和服务端转发的端口,这里选取8888为本地jupyter监听端口。remote_user@remote_host
用实际的远程帐户和远程地址替换。 - 在远程服务器打开Jupter Notebook:
jupyter notebook --no-browser --port=8899
,这里的port
使用刚刚配置的远程端口。 - 通常,这个时候已经可以在本地正常使用Jupyter,但是如果出现如下报错:
channel 2: open failed: connect failed: Connection refused
,则需要在远程服务器端命令加上--ip=remote_host
填入远程服务器ip。
- 在本地创建端口映射:
C++
VS Code
Windows开发环境
- 整理:Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(主要Windows、简要Linux)
整理:Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(主要Windows、简要Linux) - 使用 Visual Studio Code 搭建 C/C++ 开发和调试环境
使用 Visual Studio Code 搭建 C/C++ 开发和调试环境
教程中使用的配置已经加入了识别Windows系统的指令,因此不会影响Linux系统下的直接编译。同时,教程中使用的编译器是gcc,编译C++需要将gcc的参数改为g++,否则编译.cpp文件会报错。 - VSCode下配置C++
VSCode下配置C++ - 在 VSCode 中配置 C++ 环境
在 VSCode 中配置 C++ 环境
Linux开发环境
- Linux从入门到适应(一):VSCode C++环境配置
Linux从入门到适应(一):VSCode C++环境配置 - linux系统下如何在vscode中调试C++代码
linux系统下如何在vscode中调试C++代码
C++11问题
- VS Code编译支持C++11问题
VS Code编译支持C++11问题 - Linux 下 vscode c++11的一些环境配置
Linux 下 vscode c++11的一些环境配置
Git
在使用Git进行版本管理时,容易误提交敏感数据或者较大的文件。这些文件即使删除后,仍然会被保留在版本库中。同时,Git并不是非常适用于对于二进制文件的管理,加上网络限制,上传例如PDF等文件会导致Push和Pull时间过长甚至超时报错。针对这些问题,如果需要彻底删除历史提交的文件,需要使用额外的指令。
- Git 永久删除文件
Git 永久删除文件 - Git永久删除文件和历史记录
Git永久删除文件和历史记录 - Git如何永久删除文件(包括历史记录)
Git如何永久删除文件(包括历史记录)
在使用GitHub管理代码时,有时会遇到代码无法pull或push的情况并报连接超时。解决方案如下:
- github.com连接超时
github.com连接超时
解决无法Ping通Github - 选择合适的ip后仍然无法连接GitHub
无法访问 github,但能 ping 通
这个方法意外的有效 GitHub能ping通却打不开问题解决 - 使用镜像进行clone效果很好 Github速度太慢解决方案,clone速度慢
Windows Subsystem for Linux
踩坑
-
在Windows10 x64位下安装。
可选多种Linux发行版,目前安装Ubuntu18.04直接安装Microsoft Store下不带版本号的发行版即可。 -
创建用户后默认会使用root用户,如果需要切换默认用户,需要在PowerShell中使用命令:
<ubuntu1804.exe> config --default-user <user_name>
注意
ubuntu1804.exe
需要根据当前使用的Linux发行版填写,否则会报错。lxrun
是旧版,已无法使用。
如果是安装不带版本号的ubuntu,则不会出现上述情况。 -
系统出现的蜂鸣声(和Vim无关):
sudo vim /etc/inputrc
将
# set bell-style none
的注释去除。 -
如果直接从windows scp _vimrc文件,则会出现
vim E492: Not an editor command: ^M
报错,这是Unix和Windows下对于换行符的不兼容造成,因此需要将vimrc配置为Unix格式。
使用vim打开.vimrc,输入:set fileformat=unix
即可。 -
Vim出现的蜂鸣:
如果在.vimrc
中已经有set noerrorbells
仍有蜂鸣,则加入set belloff=all
-
Powershell下右键会直接粘贴,这是由于Powershell的属性-选项中勾选了
快速编辑模式
。将其取消,同时勾选将Ctrl+Shift+C/V用作复制/粘贴的快捷键
。 -
apt-get和pip使用清华镜像:
Ubuntu 18.04 LTS 默认安装python3.6.9,但是没有pip3,因此需要先更新apt-get源,然后安装pip3,然后再更新pip3源。 -
进入WSL后查看git发现所有的文件都被修改,原因是行尾产生问题:
https://github.com/Microsoft/WSL/issues/184
解决方法是在WSL里执行
git config --global core.autocrlf false git config --global core.safecrlf true
-
如果使用zsh,执行
chsh -s /bin/zsh
不能将默认shell替换为zsh,在打开WSL时,默认shell仍然是bash。解决方案是在~/.bashrc
中添加bash -c zsh
,在启动WSL同时打开zsh。目前放弃zsh。 -
htop
不能使用问题:参考微软WSL在GitHub上的issuehtop not working #25,
跳转至WSL Ubuntu 20.04 - gpg: can’t connect to the agent: IPC connect call failed #5125,查看@Kagami在2020/04/25的comments,使用如下命令可以解决:
sudo add-apt-repository ppa:rafaeldtinoco/lp1871129
sudo apt update
sudo apt install libc6=2.31-0ubuntu8+lp1871129~1 libc6-dev=2.31-0ubuntu8+lp1871129~1 libc-dev-bin=2.31-0ubuntu8+lp1871129~1 -y --allow-downgrades
sudo apt-mark hold libc6
- 参考资料:
解决vim E492: Not an editor command: ^M
Windows Subsystem for Linux(WSL)安装记录
WSL 配置指北:打造 Windows 最强命令行
调教你的WSL终端
Windows Subsystem for Linux (WSL) 设置 zsh 为默认 shell
wsl中加载git之后,发现文件是修改状态
Latex工具链
可以方便的写LaTeX文件,同时完成编译预览等
经过使用,事实证明直接sudo apt-get install texlive-full
会下载大量无效的工具(如各种用不到的语言包,xterm这个终端模拟器等),因此,目前看来只需要安装必要的库即可:
sudo apt-get install texlive-latex-base
sudo apt-get install latex-cjk-all
sudo apt-get install texlive-latex-extra
sudo apt-get install texlive-xetex
使用Latex编写中文文档时,如果需要调整字体,会是一件比较痛苦的事,经过反复摸索,目前可以使用的解决方案如下:
基于Ubuntu 20.04 LTS (WSL), VsCode。
编译环境使用上文所说的环境,同时需要保证要使用的字体可以被正常识别。网上的说法是在Windows系统中可以使用命令fc-list
查看当前系统使用的字体,但是在Win10上并不能使用,在Ubuntu系统上可以正常运行,因此选择使用Ubuntu环境。接着步骤为:
- 在
/usr/share/fonts/
路径下可以建立一个新的文件夹,存放自己的字体格式(只需要.ttf
格式即可),如果是WSL可以将Windows字体复制过去,Windows字体路径为/mnt/c/Windows/Fonts
。 - 在保存新字体的文件夹中给所有文件开放可执行权限
chmod 755 *
- 接着根据当前目录下的字体建立scale文件
sudo mkfontscale
- 接着建立dir文件
sudo mkfontdir
- 然后运行
sudo fc-cache -fv
将Windows下的字体库迁移到Ubuntu下使用SinaBlog
之后再使用fc-list
可以找到已安装的字体,例如Consolas, Fira Code, Sarasa等:
$ fc-list | grep Consolas
/usr/share/fonts/win10/consolai.ttf: Consolas:style=Italic
/usr/share/fonts/win10/consolaz.ttf: Consolas:style=Bold Italic
/usr/share/fonts/win10/consola.ttf: Consolas:style=Regular
/usr/share/fonts/win10/consolab.ttf: Consolas:style=Bold
$ fc-list | grep Sarasa
/usr/share/fonts/win10/sarasa-ui-sc-light.ttf: Sarasa UI SC,更纱黑体 UI SC,Sarasa UI SC Light,更纱黑体 UI SC Light:style=Light,Regular
/usr/share/fonts/win10/sarasa-mono-sc-bolditalic.ttf: Sarasa Mono SC,等距更纱黑体 SC:style=Bold Italic
/usr/share/fonts/win10/sarasa-mono-sc-lightitalic.ttf: Sarasa Mono SC,等距更纱黑体 SC,Saras
Mono SC Light,等距更纱黑体 SC Light:style=Light Italic,Italic
/usr/share/fonts/win10/sarasa-term-sc-lightitalic.ttf: Sarasa Term SC,Sarasa Term SC Light:style=Light Italic,Italic
/usr/share/fonts/win10/sarasa-mono-sc-bold.ttf: Sarasa Mono SC,等距更纱黑体 SC:style=Bold
Latex中需要使用的是.ttf
后的字体名,必须保证完全相同,包括大小写。
在导言区导入:
\documentclass[12pt, a4paper]{article}
\usepackage{ctex}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amsthm}
\usepackage{graphfig}
\usepackage{theorem}
\usepackage{hyperref}
\usepackage{geometry}
\usepackage{verbatim}
\usepackage{listings}
\usepackage{fontspec}
\setsansfont{Consolas}
\setmonofont{Fira Code}
\setCJKmainfont{Sarasa Term SC}
\setCJKsansfont{Sarasa Term SC}
\setCJKmonofont{Sarasa Mono SC}
对于修改字体必备的是fontspec
包,然后设置默认字体即可。
在Windows中,安装字体需要右键选择对所有用户安装。由于fc-list
无法使用,在Win10中看到的字体不一定是全局的,使用win+r
调出控制台输入fonts可以看到系统中安装的字体,对应地址为C:\Windows\Fonts
。
同时也可以参考:
XeLaTeX编译CTEX报系统字体错误CSDN
常用工具安装
在安装了WSL之后,开发环境完全适配Windows,常用的工具链直接在WSL中进行即可。由于Linux强大的包管理功能和更友好的开发环境,很多在Windows上安装不顺的功能可以非常轻松的完成。
TaLib
2022/03更新
TaLib在Win10系统的安装
Python 量化:Ta-Lib 安装(win10)知乎
TaLib在64位Windows安装非常繁琐 ,因此使用官方推荐的方式在WSL上安装:
先下载源码进行编译,然后安装库即可:
$ wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
$ tar -xzvf ta-lib-0.4.0-src.tar.gz
$ cd ta-lib
$ sudo ./configure --prefix=/usr
$ sudo make
$ sudo make install
$ sudo pip3 install Ta-Lib
MPI
MPI安装的资料众说纷纭,目前看来最方便的方式是:
$ sudo apt-get install mpich # MPICH和OpenMPI对比下,MPICH安装更加简单
$ which mpicc # 确认是否加入环境变量,如果没有需要加入
$ sudo pip3 install mpi4py
测试如果from mpi4py import MPI
没有报错,则说明安装成功。
自可乐 简书
然后写一个Python脚本:
# mpi_helloworld.py
from mpi4py import MPI
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
node_name = MPI.Get_processor_name() # get the name of the node
print 'Hello world from process %d at %s.' % (rank, node_name)
在Shell里执行:
$ mpiexec -n 2 python3 mpi_helloworld.py
正常运行则说明安装完成。
.vimrc配置
" General {{{
" 取消兼容模式
set nocompatible
" set nobackup
set noswapfile
set noundofile
set noerrorbells
set history=1024
set autochdir
" 自动更新被修改文件
set autoread
set whichwrap=b,s,<,>,[,]
set nobomb
set backspace=indent,eol,start whichwrap+=<,>,[,]
set clipboard+=unnamed
set fileencodings=utf-8,gbk2312,gbk,gb18030,cp936
set encoding=utf-8
set fencs=utf8,gbk,gb2312,gb18030
" set langmenu=zh_CN
" 使用拼写检查,[s ]s进行错误跳转,z=显示提示修改
" set spell spelllang=en_us
let $LANG = 'en_US.UTF-8'
" }}}
" GUI {{{
" colorscheme molokai
colorscheme desert
set laststatus=2
" 使用相对行号
set number relativenumber
" set lines=50 columns=120
set textwidth=120
set guioptions-=T
set guioptions-=m
set guioptions-=L
set guioptions-=r
set guioptions-=b
set guioptions-=e
set laststatus=2
" set guifont=Consolas:h14
set showmode
set showcmd
set wrap
set wrapmargin=2
set scrolloff=5
" 打开语法高亮
syntax enable
syntax on
" }}}
" Format {{{
" 256色
set t_Co=256
set autoindent
set smartindent
set expandtab
set tabstop=4
set softtabstop=4
" 根据缩进折叠
" set foldmethod=indent
" 根据标记折叠
set foldmethod=marker
set foldlevel=0
set shiftwidth=4
set ruler
set showmatch
" 高亮显示搜索内容
set hlsearch
" 搜索过程中动态显示匹配内容
set incsearch
set linebreak
set ignorecase
set smartcase
filetype on
" 根据文件类型决定缩进
filetype indent on
" }}}
Win10远程桌面连接ubuntu20.04
经过多次尝试多次踩坑后发现最好的解决方案为:
- 系统设置-共享-屏幕共享 改为活动
- 安装xrdp
sudo apt-get install xrdp
- 安装dconf-editor并设置
sudo apt-get install dconf-editor
- 启动软件“dconf-editor",打开之后,依次展开org->gnome->desktop->remote-access,然后取消requlre-encryption的勾选
- 进入Windows,开启远程桌面,填入IP登陆,选择vnc-any,填入IP和共享设置的密码。
ubuntu20.04远程桌面这样装CSDN
另一种方案是再配置xubutnu桌面环境,使用xRDP协议:
Windows 远程桌面连接Ubuntu操作以及各种问题解决CSDN
win10如何远程桌面访问Ubuntu18.04版本?CSDN
[安装教程]使用Windows10远程桌面连接访问UbuntuCSDN
Miniconda
安装Miniconda后,需要自己安装的第三方库:
pip install ipython numpy pandas matplotlib scikit-learn scipy cython dask flake8 flask tqdm bs4 requests statsmodels sympy tabulate tables xgboost gplearn h5py joblib numba prettytable pymssql pymysql redis reportlab yapf plotly pyarrow seaborn sqlalchemy gevent paramiko fabric colorama