网站建设既有书籍又有光盘,网站建设 自动跳转,中铁建设门户网个人登录,沈阳商城网站开发转自#xff1a;Python猫有一个这样的问题#xff1a;现要用 setuptools 把一个项目打包成 whl 文件#xff0c;然后 pip install 在 Windows/Linux 两种操作系统上#xff0c;但是该项目中有一些依赖库只有 Windows 上才有(例如 pywinauto、pywingui、pywinrm)#xff0c… 转自Python猫有一个这样的问题现要用 setuptools 把一个项目打包成 whl 文件然后 pip install 在 Windows/Linux 两种操作系统上但是该项目中有一些依赖库只有 Windows 上才有(例如 pywinauto、pywingui、pywinrm)那么问题是如何实现打包文件的可兼容性安装从打包的角度这个问题的关键还是看 setup.py 和 requirements.txt 文件。关于 Python 的包构建分发和 setup.py 的使用这里有篇文章 写得很好推荐阅读。另外关于 Python 依赖库的管理(requirements.txt)这篇文章 详细比较了 pip、pipreqs、pigar、pip-tools 和 pipdeptree 等工具也推荐一读。有一个比较笨的实现方法维护两份 requirements.txt 文件分别用来打包然后分发给不同操作系统去使用。但是这样会有麻烦维护两份依赖文件和两种包文件本身就挺费劲的而在生成过程中每次还得对它们改名以作区分(注意包名有一定的规范约束乱改的话pip 可能识别不出)维护成本就很高。其实维护软件包在不同操作系统的版本并不少见。如果你曾留意过不同版本 Python 库文件的话你会注意到很多库都会按不同操作系统而分发不同的版本。例如下面是同一版本号的 Numpy 在不同操作系统上的分发版(https://pypi.org/simple/numpy/)可以看出它根据 macos、linux 和 win 三类操作系统及其位数分成了 5 个版本。维护这么多版本肯定是一件麻烦事但是出现了这样的结果就意味着 Numpy 官方认为分发不同系统版本是利大于弊的而且是有办法实现的。回到我们的问题是否有必要像 Numpy 那样设法打包成多个操作系统定制的包呢答案是否定的。主要的原因Numpy 这么做是因为它是做科学计算的为了提升效率它把编译好的 C 拓展文件打包从而不需要依赖环境上的 libxxx-devel 之类的库。如果你编译安装过 Python应该有印象需要安装 zlib-devel、openssl-devel 和 libffi-devel 之类的系统依赖。但我们前面的问题比较简单并不是有不同的编译依赖(系统级)而只是三方库依赖不同(项目级)。另一个主要的原因Numpy 打包出的不同系统版本并非简简单单地用 setuptools 之类的 Python 库就能打包而是要借助标准的镜像进行构建。例如manylinux 版本的打包参见 Github(https://github.com/pypa/manylinux)就需要使用官方提供的 Docker 镜像。对于我们的问题显然不想做到这么麻烦。简而言之根据前面的分析如果要实现操作系统兼容的打包维护多份依赖文件、使用不同构建包的方法、维护多系统专用的包方法可行但并不是很适用。如果没有新的办法这不失为一种考虑但是有没有别的办法了呢我曾被这个问题困扰过但是没有深入去研究解决直到无意中在loguru 这个用来记录日志的库的 setup.py 中看到再翻看大名鼎鼎的requests 库文件发现还可以这样写两个示例都是写在 setup.py 文件中其实如果我们用 requirements.txt 文件也可以按这种格式写然后再读取进来。这种神奇的写法是怎么回事呢它的依据是 2015 年 11 月创建的 PEP-508(以及相关的但已被撤销或拒绝了的 PEP-390、PEP-426、PEP-459、PEP-496)该 PEP 的主要意图是增强 pip 等工具查找软件包的能力。比较重要的部分就是跟我们的问题相关的即对操作系统作区分的标识相关的有有了这样的扩展支持在打包依赖项时就可以解决兼容性问题了。例如 colorama 库如果我们只在 win32 系统才需要依赖那么在打包时就可以指定“colorama0.3.4 ; sys_platformwin32 ”如果不需要限定 win32 系统而是在 windows 环境都安装那么可以写成“colorama0.3.4 ; platform_systemWindows ”。最终我们解决了本文开头的问题。这个问题可能比较小众解决起来也没有什么大文章可做算是一个小小的 tips 分享给大家吧。感谢阅读推荐阅读1真实的上海IT圈张江男vs漕河泾男2真实的北京IT圈后厂村姑 vs 后厂村花3为什么你的提问没人解答4Python爱好者社区历史文章合集好看请点这里~