Win 10 中使用 Python 碰到的奇怪现象

探讨了Windows 10更新后,系统内置Python.exe的行为,解析其如何引导用户至微软商店下载Python,以及这一改动背后的系统设置调整。

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

作者:流光飞舞

来源:https://shuhari.dev/blog/2019/11/win10-store-python

最近在使用 Python 的时候发生了很奇怪的现象:从命令行执行 python.exe 并不会进入 REPL,似乎也没有其他反应,然而稍等片刻,会看到系统弹出 Windows Store 页面,并定位到 Python App 的详情页。

这个现象让我很是迷惑了一下,还以为是 Python 运行环境出了什么状况,但很快反应过来,从现象看,应该是 Windows 搞的鬼。

检查一下路径是否正常,果然:

\$ where python
C:\\Users\\yuhao\\AppData\\Local\\Microsoft\\WindowsApps\\python.exe

原理是系统自己搞了一个 Python.exe。如果从在资源管理器打开上述目录的话,会看到这里只有孤零零的几个 .exe 文件,且图标也不正常,并不是一个真正的、完整的 Python 运行环境。

那么问题来了,Windows 搞这些没有实际环境的 .exe 出来,用意何在?

从网上找到一些信息,原来从 Windows 10 2019 五月更新以来,微软试图把 Python 带到 Windows,至于具体做法,则是把 Python3 放到了自家的商店里面。而上面看到的 python.exe 是一个“假的” Python,它的唯一作用在于当系统没有找到 Python 的时候,自动跳转到微软商店去让我们下载。

以下是微软团队给出的说法:Who put Python in the Windows 10 May 2019 Update?

可能是担心这个新的功能导致一些兼容性方面的结果,微软又在系统设置里面添加了一个比较隐晦的功能。比起在层层叠叠的设置界面里找到它,更简单的方法是直接输入 app exec

这样会打开设置的“应用程序别名”界面。这里我们会看到系统认为 python.exepython3.exe 都只是安装程序的别称,不过我们也可以选择把它们关闭。这样当我们再运行 python 的时候,就会显示“找不到程序”的标准提示。实际上,Windows 是把上述 .exe 文件偷偷备份到其他地方了。

很多程序员(包括我)很可能都是按照标准的方式从官方下载安装 Python 执行文件。如果在安装过程中选择了“添加到系统环境变量”的话,那么标准 Python 会注册到系统 PATH 变量,而前面所述的 WindowsApps 目录则是 Windows 添加到用户 PATH 变量的。按照 Windows 系统的规则,PATH 环境变量是系统设置先于用户设置,所以如果安装了标准版 Python 的话,系统应该首先找到的是它,而不是应用商店版的 Python。后来我发现,之所以我的机器会出现上述问题,是因为系统设置有一点语法错误,修正以后再次测试,结果就正常了。

到此,我们已经理解了 Windows 自带的 Python 是怎么回事。微软这样做的初衷,应该是希望普通用户能更方便地用上 Python,这个想法无可厚非,但放到 Windows 应用商店这个设计思路是否合理,我还是有一些怀疑的。毕竟微软应用商店一直以来名声并不算太好,内容少、功能欠缺、速度慢,时不时发生一些恼人的小问题(比如 不知所云的 0x8000xxxx 错误)。而“应用程序别名”这个功能到底是解决了问题还是带来更多的困惑,我也持保留意见。

当我在网上查找关于该问题的信息时,也发现有其他用户同样受到该问题的困扰,比如:

  • [Bug] Don't find python library from WindowsApps dir

  • Microsoft Store installed python (3.7 - Windows 10) based virtualenvs cannot access pyd DLLs

目前,在 Windows 上面安装 Python 已经有很多不同的方式:

  • 通过官方网站下载安装;

  • 通过 Anaconda 集成软件包;

  • Visual Studio 一起安装;

  • 通过 chocolatey 之类的第三方包管理;

  • 通过 WSL 安装 Linux 版 Python;

  • 通过 Windows Store 安装;

说实话,我认为太多不同的来源渠道会让环境问题变得更复杂,增加出错的可能,并且容易迷惑初学者。对于大多数程序员来说,建议大家还是按照最基本的方式,从官方下载并安装 Python。

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版
回复关键词「m」,立即获取Python精选优质文章合集
回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~
题图:pexels,CC0 授权。

好文章,我在看❤️
<think>嗯,用户想详细了解python setup.py build_ext --inplace命令的相关信息。从引用内容来看,用户可能正在尝试编译Python扩展模块,遇到了问题需要帮助。 用户提供的引用已经给出了这个命令的核心作用:编译扩展模块并直接放在源码目录(--inplace选项)。引用[1]和[2]都清楚地解释了这点。特别是引用[2]提到这是开发调试时常用的方式,能避免重复安装。 用户可能遇到的实际问题在引用[4]中有所体现:执行命令后出现'running build_txt'的奇怪提示。这说明用户的环境可能存在配置问题。需要提醒用户检查Cython和gcc是否正确安装。 考虑到用户可能是Python扩展开发的新手,应该强调基本使用流程: 1. 创建正确的setup.py文件(如引用[5]示例) 2. 确保有C/C++编译器 3. 解释输出文件格式(.pyd或.so,引用[3]) 常见问题方面需要重点列出: - 编译器缺失(特别是Windows需要VC++或MinGW) - Cython未安装时的错误提示 - 路径包含空格或特殊字符导致失败 - 文件权限问题(Linux/macOS) 用户没有说明具体环境,所以解决方案要区分Windows/Linux/macOS。比如Windows用户需要安装Visual Studio Build Tools,而macOS需要Xcode命令行工具。 最后考虑用户可能的后续需求,相关问题设计应该覆盖: 1. 如何编写setup.py(用户可能下一步就要做) 2. 解决特定错误(如引用[4]的build_txt问题) 3. 生产环境部署的区别(对比开发时的--inplace) </think>以下是对 `python setup.py build_ext --inplace` 命令的详细说明,包含作用、使用方法和常见问题解决方案: --- ### **一、命令作用** 1. **核心功能** - 编译 `setup.py` 中定义的 **C/C++ 扩展模块**(如 `.c`, `.cpp`, Cython `.pyx` 文件)。 - `--inplace` 选项将编译生成的二进制文件(如 `.pyd` (Windows) 或 `.so` (Linux/macOS))**直接输出到源码目录**,而非默认的 `build/` 子目录[^2][^3]。 2. **开发效率优势** - 无需执行 `python setup.py install` 或复制文件,修改代码后可立即重新编译并测试,**加速开发调试循环**[^2][^5]。 --- ### **二、完整使用流程** #### 步骤1:创建 `setup.py` 文件 ```python from setuptools import setup, Extension # 定义C++扩展模块示例 example_module = Extension( name='my_module', # 导入模块名(如 import my_module) sources=['my_module.cpp'], # 源文件路径 include_dirs=['/path/to/include'], # 头文件目录 extra_compile_args=['-O2'] # 编译优化选项 ) setup(ext_modules=[example_module]) ``` #### 步骤2:执行编译命令 ```bash python setup.py build_ext --inplace ``` **生成文件**: - Windows: `my_module.cp39-win_amd64.pyd`(可直接导入) - Linux/macOS: `my_module.cpython-39-x86_64-linux-gnu.so`[^3][^5] #### 步骤3:测试模块 ```python # 在同一目录下直接导入 import my_module my_module.my_function() ``` --- ### **三、常见问题与解决方案** #### 1. **编译器缺失** - **现象**: `error: Microsoft Visual C++ 14.0 or greater is required` (Windows) 或 `gcc: command not found` (Linux/macOS)[^4]。 - **解决方案**: - **Windows**:安装 [Visual Studio Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/),勾选“C++ 桌面开发”。 - **Linux/macOS**:安装 `gcc` 和 `python-dev` 包(如 `sudo apt-get install build-essential python3-dev`)。 #### 2. **Cython 相关错误** - **现象**: `'running build_txt'` 或 `Cython does not appear to be installed`[^4]。 - **解决方案**: 安装 Cython:`pip install cython`,并确保 `setup.py` 中正确配置 `.pyx` 文件路径。 #### 3. **路径或权限问题** - **现象**: `Permission denied` 或 `Invalid output directory`。 - **解决方案**: - 检查输出目录是否有写入权限(如避免系统保护目录)。 - 路径避免空格和特殊字符(如 `C:\My Project` 改为 `C:\MyProject`)。 #### 4. **头文件/库文件缺失** - **现象**: `fatal error: numpy/arrayobject.h: No such file or directory`。 - **解决方案**: 在 `setup.py` 中补充依赖路径: ```python include_dirs=[np.get_include()] # 需先 import numpy as np ``` --- ### **四、典型应用场景** 1. **开发调试**: 快速迭代修改 C/C++ 扩展代码,即时测试功能[^2][^5]。 2. **跨平台编译**: 为不同操作系统生成对应的二进制模块(需在目标平台执行命令)。 3. **集成到项目**: 与 `pybind11`、`Cython` 等工具结合,构建高性能Python模块[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值