内网装 Python 依赖太痛苦?信息科这套方案终于打通了
在医院信息科日常工作中,Python 经常用于接口测试、数据处理、自动化脚本、报表生成、日志分析等场景。
但是医院内网环境通常不能直接访问互联网,最常见的问题就是:
pip install 装不了包。
外网一条命令就能解决的问题,到了内网环境,往往就变成了环境搭建、依赖下载、代理配置、内网分发等一系列工作。 在外网机器上提前下载好 Python 依赖包,然后拷贝到内网服务器或开发机上进行离线安装。 在一台可以访问外网的服务器上配置 Nginx 代理,内网机器访问该代理地址,再由代理转发到外部镜像源。
笔者实际采用的就是这种方式。 在内网搭建 PyPI 私有源或缓存源,统一管理常用 Python 包,适合长期、多人、生产环境使用。 这是最直接、最容易理解的一种方式。
先在一台可以访问互联网的电脑上下载依赖包,例如下载 requests: 执行后,会在当前目录下载 requests 以及它依赖的相关 whl 文件。
如果想指定下载目录,可以这样写: pip download requests -d C:\Users\N3verL4nd\Desktop\123 然后将这个目录整体拷贝到内网机器。
在内网机器上执行离线安装: pip install --no-index --find-links=C:\Users\N3verL4nd\Desktop\123 requests --find-links:指定本地依赖包所在目录。requests:需要安装的 Python 包名称。 这种方式适合依赖较少、临时安装、环境相对固定的场景。
但是如果项目依赖很多,比如 pandas、numpy、opencv、oracle 驱动等,手工下载和维护就会比较麻烦。 离线安装时,建议在外网机器和内网机器上使用相同的 Python 版本、系统架构和操作系统环境。
例如都是 Windows 64 位、Python 3.10。
否则可能会出现 whl 包不兼容的问题。 笔者实际采用的是第二种方式:
在外网服务器上配置 Nginx,将内网请求代理到外部镜像源。
这样内网机器不需要直接访问互联网,只需要访问这台代理服务器即可。 /pypi/simple:Python 包索引地址/pypi/packages:Python 包文件下载地址 下面只保留核心配置,便于理解。
Nginx 监听 8888 端口,对外提供代理服务。 server {
listen 8888;
server_name localhost;
location /pypi/simple {
proxy_pass https://mirrors.aliyun.com/pypi/simple/;
proxy_set_header Host mirrors.aliyun.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
}
location /pypi/packages {
proxy_pass https://mirrors.aliyun.com/pypi/packages/;
proxy_set_header Host mirrors.aliyun.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_ssl_server_name on;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
}
} ● 内网访问 http://代理服务器:8888/pypi/simple● Nginx 转发到 https://mirrors.aliyun.com/pypi/simple/● 下载包时再通过 /pypi/packages 获取实际 whl 文件pip install requests -i 10.10.10.10:8888/pypi/simple --trusted-host 10.10.10.10 也可以安装 pandas、openpyxl 等常用包: pip install pandas openpyxl requests -i http://10.10.10.10:8888/pypi/simple --trusted-host 10.10.10.10pip config set global.index-url http://10.10.10.10:8888/pypi/simple
pip config set global.trusted-host 10.10.10.10 pip install requests
pip install pandas
pip install openpyxl 实际工作中,信息科开发环境往往不只有 Python。
Java 项目需要 Maven,前端项目需要 NPM。
所以也可以在同一个 Nginx 中统一配置多个代理路径。 location /maven {
proxy_pass https://mirrors.huaweicloud.com/repository/maven/;
proxy_set_header Host mirrors.huaweicloud.com;
proxy_ssl_server_name on;
}
location /npm {
proxy_pass https://repo.huaweicloud.com/repository/npm/;
proxy_set_header Host repo.huaweicloud.com;
proxy_ssl_server_name on;
} 这样一台外网代理服务器,就可以同时为内网提供 Python、Java、前端等多种依赖下载能力。 ● Java、Python、NPM 等依赖可以统一代理● 最好对访问范围进行控制,避免变成无约束外网出口 内网搭建 Python 开发环境,看起来只是安装几个依赖包,实际背后涉及网络访问、依赖管理、安全控制和后续维护。
外网下载内网安装,适合临时使用;
外网 Nginx 代理,适合日常开发测试;
内网私有源,适合长期规范化建设。
笔者本次采用的是第二种方式:
通过外网 Nginx 代理,将内网 pip、maven、npm 的依赖访问链路打通。
对信息科来说,环境建设的价值不只是“能用”,更重要的是让后续开发、测试、排查和部署变得更加高效。
少一点手工拷贝,多一点统一入口;
少一点重复折腾,多一点标准沉淀。