一、2017 年 Windows 开发语言环境
2017 年的 Windows 开发语言环境呈"三国杀"——Python 3.6 时代数据科学爆发、Go 1.8 进入云原生、JDK 8 仍是 Java 主流(JDK 9 模块化 / JDK 10 var)。本文整理 Python / Go / JDK / Miniconda3 这 4 个"环境配置工具"。
阅读建议:本文面向多语言开发者,重点在Windows 下的环境隔离 + 性能调优。
二、Python 环境
2.1 Python 版本选型
| 版本 | 时间 | 状态 |
|---|
| 2.7 | 2010-07 | EOL 2020-01-01 |
| 3.5 | 2015-09 | EOL 2020-09 |
| 3.6 | 2016-12 | EOL 2021-12 |
| 3.7 | 2018-06 | EOL 2023-06 |
| 3.8 | 2019-10 | EOL 2024-10 |
| 3.9 | 2020-10 | EOL 2025-10 |
| 3.10 | 2021-10 | 维护中 |
| 3.11 | 2022-10 | 维护中 |
| 3.12 | 2023-10 | 维护中 |
| 3.13 | 2024-10 | 维护中 |
2017 推荐:Python 3.6(f-string、类型注解成熟)。
2.2 Python 安装
官方 https://www.python.org/downloads/windows/:
- Embeddable:压缩包,适合便携
- Installer:标准安装器
- Windows x86-64:64 位(推荐)
- Windows x86:32 位(不推荐)
安装时勾选:
- ☑
Add Python to PATH(关键) - ☑
Install launcher for all users
2.3 包管理 pip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # 升级 pip
python -m pip install --upgrade pip
# 装包
pip install requests flask numpy
# 指定版本
pip install django==4.2.0
# 导出依赖
pip freeze > requirements.txt
# 安装依赖
pip install -r requirements.txt
# 换源(国内)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
# pip config 永久换源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
|
2.4 虚拟环境
1
2
3
4
5
6
7
8
| # venv(标准库)
python -m venv myenv
myenv\Scripts\activate # Windows 激活
myenv\Scripts\deactivate # 退出
# virtualenv(更强大)
pip install virtualenv
virtualenv myenv
|
2.5 实战:requests
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| import requests
# GET
r = requests.get("https://api.github.com")
print(r.json())
# POST
r = requests.post("https://httpbin.org/post", json={"key": "value"})
# 设置代理
proxies = {
"http": "http://127.0.0.1:1081",
"https": "http://127.0.0.1:1081"
}
r = requests.get("https://example.com", proxies=proxies)
|
三、Go 语言
3.1 Go 版本演进
| 版本 | 时间 | 状态 |
|---|
| 1.0 | 2012-03 | EOL 2013 |
| 1.4 | 2014-12 | EOL 2016 |
| 1.5 | 2015-08 | 编译器自举 |
| 1.6 | 2016-02 | HTTP/2 |
| 1.7 | 2016-08 | 编译加速 |
| 1.8 | 2017-02 | GC 延迟降低 |
| 1.11 | 2018-08 | Go modules |
| 1.13 | 2019-09 | errors.Is/As |
| 1.18 | 2022-03 | 泛型 |
| 1.21 | 2023-08 | 性能优化 |
| 1.22 | 2024-02 | for range 增强 |
| 1.23 | 2024-08 | iter 包 |
2017 推荐:Go 1.8。
3.2 Go 安装
https://go.dev/dl/:
go1.8.windows-amd64.msi- 默认装到
C:\Go - 自动加 PATH
环境变量:
1
2
3
4
| GOROOT = C:\Go
GOPATH = C:\Users\<USER>\go
GOPROXY = https://goproxy.cn,direct # 国内代理
GO111MODULE = auto # Go 1.16+ 默认 on
|
3.3 Hello World
1
2
3
4
5
6
7
| package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
|
1
2
| go run hello.go
go build hello.go
|
3.4 Go Modules
1
2
3
4
5
6
7
8
9
10
11
| # 初始化模块
go mod init github.com/myuser/myapp
# 添加依赖
go get github.com/gin-gonic/gin
# 下载依赖
go mod download
# 整理 go.mod
go mod tidy
|
3.5 跨平台编译
1
2
3
4
5
6
7
8
9
| # Windows 编译 Linux 二进制
SET GOOS=linux
SET GOARCH=amd64
go build -o myapp-linux
# Windows 编译 macOS
SET GOOS=darwin
SET GOARCH=amd64
go build -o myapp-mac
|
3.6 实战:HTTP 服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| package main
import (
"fmt"
"net/http"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", helloHandler)
http.ListenAndServe(":8080", nil)
}
|
四、JDK
4.1 JDK 版本选型
| 版本 | 时间 | 状态 |
|---|
| 8 | 2014-03 | 主流(LTS) |
| 9 | 2017-09 | 模块化(非 LTS) |
| 10 | 2018-03 | var(非 LTS) |
| 11 | 2018-09 | LTS |
| 14 | 2020-03 | switch 表达式(非 LTS) |
| 17 | 2021-09 | LTS |
| 21 | 2023-09 | LTS |
2017 推荐:JDK 8(绝对主流),JDK 9 早期采用。
4.2 JDK 8 安装
- Oracle JDK:商业授权(生产要订阅)
- OpenJDK:开源(Adoptium / Eclipse Temurin)
- Azul Zulu:开源 + 商业
1
2
3
| # 验证安装
java -version
javac -version
|
4.3 环境变量
1
2
3
| JAVA_HOME = C:\Program Files\Java\jdk1.8.0_xxx
PATH += %JAVA_HOME%\bin
CLASSPATH = .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
|
4.4 多个 JDK 切换
SDKMAN(Linux/Mac 友好)或 jenv(跨平台):
1
2
3
4
5
6
7
| # jenv
jenv versions
# 1.8
# 11
# 17
jenv global 11
|
Windows 上手动改 JAVA_HOME 是最常用方案。
4.5 Java 8 关键特性
- Lambda:
list.forEach(s -> System.out.println(s)); - Stream:
list.stream().filter(s -> s.startsWith("a")).count(); - Optional:
Optional.ofNullable(x).orElse("default") - Date/Time API:
LocalDate.now()
4.6 Java 11+ 新特性
var 关键字:var list = new ArrayList<String>();- HTTP Client:
HttpClient.newHttpClient() - 单文件运行:
java HelloWorld.java - ZGC:低延迟 GC
五、Miniconda3
5.1 定位
Miniconda 是 Anaconda 的精简版——只装 Python + conda 包管理器,不预装 200+ 数据科学包。适合:
- 数据科学 / 机器学习环境
- 多 Python 版本共存
- 不污染系统 Python
5.2 安装
https://docs.conda.io/en/latest/miniconda.html:
Miniconda3-latest-Windows-x86_64.exe- 不要装到带空格的路径(虽然支持)
5.3 虚拟环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 创建环境
conda create -n myenv python=3.10
# 激活
conda activate myenv
# 退出
conda deactivate
# 列出环境
conda env list
# 删除
conda env remove -n myenv
|
5.4 包管理
1
2
3
4
5
6
7
8
9
10
11
| # 装包
conda install numpy pandas scikit-learn
# 装 pip 包(混合用)
pip install requests
# 导出
conda env export > environment.yml
# 导入
conda env create -f environment.yml
|
5.5 国内镜像
1
2
3
4
5
| # 清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --set show_channel_urls yes
|
5.6 conda vs venv vs pip
| 维度 | conda | venv | pip |
|---|
| 虚拟环境 | ✓ | ✓ | ✗ |
| 包管理 | ✓ | ✗ | ✓ |
| 二进制依赖 | 强(自动装 CUDA / MKL) | 弱 | 弱 |
| 包来源 | Anaconda 仓库 | PyPI | PyPI |
| 速度 | 慢 | 快 | 快 |
| 跨平台 | ✓ | ✓ | ✓ |
经验法则:
- 数据科学 / ML → conda(自动装 CUDA)
- Web 开发 → venv + pip
- 包发布 → pip(PyPI 是事实标准)
六、Elasticsearch 入门
6.1 安装
- 官方:
https://www.elastic.co/downloads/elasticsearch - 历史版本 5.0+ 才支持 SQL
- Windows ZIP 解压即用
6.2 启动
1
2
| cd C:\elasticsearch-5.0.0\bin
elasticsearch.bat
|
首次启动会:
- 创建
elasticsearch 用户(Windows 要以管理员) - 监听
9200(HTTP)/ 9300(节点间)
6.3 基础操作
1
2
3
4
5
6
7
8
9
10
| # 健康检查
curl http://localhost:9200/_cluster/health
# 索引文档
curl -X PUT "localhost:9200/my_index/_doc/1" \
-H "Content-Type: application/json" \
-d '{"title": "Hello", "content": "World"}'
# 搜索
curl -X GET "localhost:9200/my_index/_search?q=hello"
|
6.4 集群
1
2
3
4
5
6
| # elasticsearch.yml
cluster.name: my-cluster
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node-1", "node-2", "node-3"]
|
七、Tesseract OCR 文字识别
7.1 安装
https://github.com/UB-Mannheim/tesseract/wiki:
- Windows 安装包
- 勾选中文语言包:
chi_sim(简体)/ chi_tra(繁体) - 加 PATH:
C:\Program Files\Tesseract-OCR
7.2 命令行
1
2
3
4
5
6
7
8
9
10
11
| # 识别单张图
tesseract input.png output -l chi_sim+eng
# 识别 PDF
tesseract input.pdf output -l chi_sim+eng
# 输出带坐标的 hOCR
tesseract input.png output hocr
# 输出 TSV(**表格友好**)
tesseract input.png output tsv
|
7.3 Python 绑定
1
2
3
4
5
6
| import pytesseract
from PIL import Image
img = Image.open("screenshot.png")
text = pytesseract.image_to_string(img, lang="chi_sim+eng")
print(text)
|
7.4 提升识别率
- 预处理:
- 二值化(
cv2.threshold) - 降噪(
cv2.medianBlur) - 倾斜矫正(
cv2.warpAffine)
- DPI ≥ 300
- 多语言组合:
chi_sim+eng --psm 6 单块文本假设
八、组合实战
8.1 Python 数据科学环境
1
2
3
4
| conda create -n ds python=3.10
conda activate ds
conda install numpy pandas scikit-learn matplotlib jupyter
pip install requests
|
8.2 Go + Docker 微服务
1
2
3
4
5
6
7
8
9
| # 多阶段构建
FROM golang:1.22 AS build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o myapp
FROM alpine:3.18
COPY --from=build /app/myapp /myapp
CMD ["/myapp"]
|
8.3 Java 微服务
1
2
3
4
5
6
7
8
| # Spring Boot
./mvnw spring-boot:run
# 打包
./mvnw clean package
# Docker
docker build -t myapp:1.0 .
|
九、常见问题
9.1 Python pip 装包失败
- 换源(国内)
- 升级 pip:
python -m pip install --upgrade pip - 编译器缺失:装 Visual C++ Build Tools
9.2 Go 编译慢
1
2
3
4
5
6
7
8
| # 启用编译缓存
go env -w GOCACHE=C:\Users\<USER>\.cache\go-build
# 启用 module 代理
go env -w GOPROXY=https://goproxy.cn,direct
# 启用 module 缓存
go env -w GOMODCACHE=C:\Users\<USER>\go\pkg\mod
|
9.3 JDK 多版本切换
JAVA_HOME 改环境变量- 重新打开 PowerShell
- 或用 jenv(Windows 10+)
9.4 conda 环境冲突
- 删除重建:
conda env remove -n myenv && conda create ... - 清理缓存:
conda clean --all
9.5 Elasticsearch 启动报错
- JVM 堆不够:调
config/jvm.options -Xms4g -Xmx4g - root 用户:需建
elasticsearch 用户 - max_map_count:
sysctl -w vm.max_map_count=262144(Linux)
十、下一步
- 想看 Python 深入:[2024-11-05 Python 入门:核心语法与环境管理]
- 想看 Java 深入:[2014-04-15 IntelliJ IDEA 全攻略]
- 想看 Go 微服务:[2017-10-15 ProtoBuf & gRPC 实战]
本文写于 2017 年,回看当时:Python 3.6 f-string 起飞、2017 是 Python 黄金时代的开端;Go 1.8 GC 改善、k8s 生态全面拥抱 Go;JDK 9 模块化实验失败、JDK 11 LTS 才是转折点;Miniconda 至今仍是数据科学事实标准;ES 5.0 是最大的版本断裂——5 款工具 10 年后仍是同类最强。