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-256
或 md5
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_username
和your_database_name
替换为你的 PostgreSQL 用户名和数据库名。执行后会提示你输入密码,如果成功,你就会进入 PostgreSQL 交互终端
(5)在 Python 项目中配置连接
在你的 Python 项目(例如使用 psycopg2
或 asyncpg
库)中,配置数据库连接字符串时,使用 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)常见问题排查
如果连接失败,可以按以下步骤检查:
-
检查 PostgreSQL 是否监听正确 :在 Windows 上,用
netstat -an | findstr :5432
查看是否有0.0.0.0:5432
或:::5432
的监听信息。 -
检查防火墙规则 :确认 Windows 防火墙确实允许了
5432
端口的入站连接。 -
检查 pg_hba.conf :确认
pg_hba.conf
中的网段配置正确覆盖了 WSL2 的 IP 地址,并且认证方法正确。 -
检查密码:确认连接时使用的用户名和密码正确无误。
-
检查网络连通性 :从 WSL Ubuntu 中
ping
你的 Windows 主机 IP,看是否能通。
总的来说,直接在 WSL 的 Ubuntu 中连接 Windows 主机上的 PostgreSQL 是非常可行且常见的做法。只需进行一些网络和权限配置,你的 Python 项目就能无缝使用 Windows 系统中的 PostgreSQL 数据库了。