在windows 10系统上使用WSL安装Ubuntu系统并配置开发环境

1、使用wsl安装ubuntu子系统

参考官方文档:

2、建立项目文件存储在 Windows 分区的设置

bash 复制代码
# 在 Windows E 盘创建项目文件夹
# 然后在 WSL 中创建符号链接到 home 目录
ln -s /mnt/e/我的项目 ~/projects

# 进入projects
cd ~/projects

好处:(1)当linux子系统删除之后,项目文件依然存在。

(2)使用windows资料管理器文件系统

3、启动出现"参考的对象类型不支持尝试的操作"的问题处理:

启用安装的ubuntu出现:"参考的对象类型不支持尝试的操作。"时,可能是由于PC电话启用相关的VPN引起的,可使用以下命令重置:

(1)在 Windows 搜索栏中输入 PowerShell

(2)右键单击 "Windows PowerShell"并选择 "以管理员身份运行"

(3)在打开的管理员 PowerShell 窗口中,输入以下命令并按回车:

bash 复制代码
netsh winsock reset

(4)命令执行成功后,务必重启你的电脑(必须是重启,关机再开可能无效)。

(5)重启后,再次尝试启动 WSL。

4、WSL 的 Ubuntu 系统中开发 Python 项目,并直接连接 Windows 系统上安装的 PostgreSQL 数据库的方法

(1)在Windows 上安装 PostgreSQL;

(2)配置 Windows 上的 PostgreSQL:

要让 Ubuntu 中的 Python 项目能访问 Windows 上的 PostgreSQL,首先需要确保 PostgreSQL 接受来自 WSL 的连接。

1)修改监听地址 :找到 PostgreSQL 的配置文件 postgresql.conf(通常位于 C:\Program Files\PostgreSQL\<版本号>\data)。找到 listen_addresses 参数,并将其修改为:

复制代码
listen_addresses = '*'   # 监听所有网络接口,或者指定为 'localhost,172.0.0.0/8' 等更精确的 WSL 地址:cite[2]:cite[4]

这允许 PostgreSQL 接受来自网络的连接,而不仅仅是本机。

2)配置客户端认证 :修改 PostgreSQL 的客户端认证配置文件 pg_hba.conf(在同一目录下)。在文件末尾添加一行,允许 WSL 子网连接:

复制代码
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             172.16.0.0/12          scram-sha-256  # 或 md5, 根据你的认证方式;172.16.0.0/12 覆盖了常见的 WSL2 网段:cite[2]

METHOD 部分根据你的 PostgreSQL 安装时设置的认证方式填写,通常是 scram-sha-256md5

3)重启 PostgreSQL 服务 :修改配置后,你需要重启 PostgreSQL 服务才能使更改生效。你可以在 Windows 服务管理器中找到 "PostgreSQL" 服务并重启它,或者以管理员身份在 PowerShell 中运行:

bash 复制代码
Restart-Service -Name postgresql-*
# 或者使用
# net stop postgresql-<版本号> && net start postgresql-<版本号>

4)设置 Windows 防火墙 :确保 Windows 防火墙 允许对 PostgreSQL 端口(默认为 5432)的入站连接

  • 你可以通过"控制面板" -> "系统和安全" -> "Windows Defender 防火墙" -> "高级设置" -> "入站规则"来添加规则。

  • 新建规则,选择"端口",协议为"TCP",特定本地端口填入"5432",然后选择"允许连接",并配置规则应用的网络环境和名称即可。

(3)获取 Windows 主机的 IP 地址

在 WSL 的 Ubuntu 中,你需要使用 Windows 主机的 IP 地址 来连接 PostgreSQL。请注意,WSL2 中 Windows 主机的 IP 地址与普通的本地主机地址(127.0.0.1)不同。

在 Ubuntu 终端中运行以下命令来获取 Windows 主机的 IP 地址:

bash 复制代码
cat /etc/resolv.conf | grep nameserver | awk '{print $2}'

或者使用:

bash 复制代码
hostname -I | awk '{print $1}'

通常,这个地址是 172.x.x.x。我们假设这个地址是 172.25.32.1

(4)在 WSL Ubuntu 中测试连接

1)安装 PostgreSQL 客户端 (可选,用于测试连接):

在 Ubuntu 终端中,你可以安装 postgresql-client 来使用 psql 命令行工具测试连接:

bash 复制代码
sudo apt update
sudo apt install postgresql-client

2)使用 psql 测试连接

bash 复制代码
psql -h 172.25.32.1 -p 5432 -U your_postgresql_username -d your_database_name
  • 172.25.32.1 替换为你实际的 Windows 主机 IP。

  • your_postgresql_usernameyour_database_name 替换为你的 PostgreSQL 用户名和数据库名。

    执行后会提示你输入密码,如果成功,你就会进入 PostgreSQL 交互终端

(5)在 Python 项目中配置连接

在你的 Python 项目(例如使用 psycopg2asyncpg 库)中,配置数据库连接字符串时,使用 Windows 主机的 IP 地址

python 复制代码
# 例如使用 psycopg2
import psycopg2

conn = psycopg2.connect(
    host='172.25.32.1',  # 替换为你的 Windows 主机 IP
    port=5432,
    user='your_postgresql_username',
    password='your_password',
    database='your_database_name'
)

# 或者使用 SQLAlchemy
# SQLALCHEMY_DATABASE_URI = f'postgresql+psycopg2://your_username:your_password@172.25.32.1:5432/your_database_name'

(6)关键步骤总结

| 步骤 | 操作系统 | 操作内容 | 命令/配置示例 | 备注 |
|----|----------------|----------------------|---------------------------------------------|-----------------------------------------------------------------------------|---------|
| 1 | Windows | 修改 postgresql.conf | listen_addresses = '*' | 允许外部连接4 |
| 2 | Windows | 修改 pg_hba.conf | host all all 172.16.0.0/12 scram-sha-256 | 设置访问权限2 |
| 3 | Windows | 重启 PostgreSQL 服务 | Restart-Service -Name postgresql-* | 使配置生效 |
| 4 | Windows | 配置防火墙 | 允许端口 5432 TCP 入站 | 2 |
| 5 | WSL Ubuntu | 查找 Windows IP | `cat /etc/resolv.conf | grep nameserver` | 获取主机 IP |
| 6 | WSL Ubuntu | 测试连接 | psql -h 172.25.32.1 -U username -d dbname | 验证连通性9 |
| 7 | Python | 配置连接字符串 | host='172.25.32.1' | 在代码或环境变量中设置 |

(7)注意事项

  • 性能考量:虽然通过网络连接是可行的,但相比本地 Unix 域套接字连接,会存在微小的网络开销。对于大多数开发场景,这个开销可以忽略不计。

  • IP 地址变动WSL2 中 Windows 主机的 IP 地址在每次重启后可能会变化。为了解决这个问题,你可以:

    • 在 Python 配置中动态获取(例如每次通过执行 cat /etc/resolv.conf | grep nameserver | awk '{print $2}' 获取)。

    • 或者考虑在 Windows 上设置一个静态的 IP 地址给 WSL2 适配器(操作相对复杂)。

  • 安全考虑:上述配置打开了 PostgreSQL 的网络端口。确保你的 PostgreSQL 用户设置了强密码。在生产环境中,你需要更加严格的安全配置。

  • 服务状态 :确保 Windows 上的 PostgreSQL 服务正在运行,否则 WSL 中的应用程序将无法连接。

  • 身份验证 :确保你在 pg_hba.conf 中设置的认证方法(scram-sha-256, md5, password)与你的 PostgreSQL 用户密码的加密方式匹配,否则会导致认证失败。

(8)常见问题排查

如果连接失败,可以按以下步骤检查:

  1. 检查 PostgreSQL 是否监听正确 :在 Windows 上,用 netstat -an | findstr :5432 查看是否有 0.0.0.0:5432:::5432 的监听信息。

  2. 检查防火墙规则 :确认 Windows 防火墙确实允许了 5432 端口的入站连接。

  3. 检查 pg_hba.conf :确认 pg_hba.conf 中的网段配置正确覆盖了 WSL2 的 IP 地址,并且认证方法正确。

  4. 检查密码:确认连接时使用的用户名和密码正确无误。

  5. 检查网络连通性 :从 WSL Ubuntu 中 ping 你的 Windows 主机 IP,看是否能通。

总的来说,直接在 WSL 的 Ubuntu 中连接 Windows 主机上的 PostgreSQL 是非常可行且常见的做法。只需进行一些网络和权限配置,你的 Python 项目就能无缝使用 Windows 系统中的 PostgreSQL 数据库了。

相关推荐
深思慎考3 小时前
LinuxC++项目开发日志——基于正倒排索引的boost搜索引擎(3——通过cppjieba库建立索引模块)
linux·c++·搜索引擎
数据牧羊人的成长笔记3 小时前
Python爬虫基础与应用
开发语言·爬虫·python
IT北辰3 小时前
用Python一键整理文件:自动分类DOCX与PDF,告别文件夹杂乱
开发语言·python·pdf
蒋星熠3 小时前
支持向量机深度解析:从数学原理到工程实践的完整指南
人工智能·python·深度学习·神经网络·算法·机器学习·支持向量机
IT学长编程3 小时前
计算机毕业设计 基于Python的音乐推荐系统 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·hadoop·python·深度学习·毕业设计·课程设计·音乐推荐系统
一人の梅雨3 小时前
小红书开放平台笔记详情接口实战:内容解析与数据挖掘全方案
windows·python
心随雨下3 小时前
Liunx系统下出现“Could not resolve host: mirrorlist.centos.org; 未知的错误”地解决方案
linux·python·centos
love530love3 小时前
2025 PyCharm IDE 社区版与专业版合并后,新手该如何安装?(附 Toolbox 图形化安装教程)
ide·人工智能·windows·python·架构·pycharm·github
珊瑚礁的猪猪侠4 小时前
ADB使用指南
python·adb·visual studio code