如何在不包含主机环境的站点包文件夹的情况下将 pywin32 与 virtualenv 一起使用?

Posted

技术标签:

【中文标题】如何在不包含主机环境的站点包文件夹的情况下将 pywin32 与 virtualenv 一起使用?【英文标题】:How can I use pywin32 with a virtualenv without having to include the host environment's site-packages folder? 【发布时间】:2010-12-22 06:22:38 【问题描述】:

我正在使用 Python 2.6 下的 PyInstaller,由于 MS 用他们的清单废话创建的混乱现在影响了 Python,因为它现在是 MSVC8 编译的,因此只能部分支持。

问题在于清单嵌入支持依赖于 pywin32 扩展来构建,这很痛苦,因为在我创建 virtualenv 时不包括主机的站点包文件夹(有点破坏了构建中的要点环境)我找不到安装所需扩展的方法,因此 PyInstaller 可以访问它们。

有没有人找到解决这个问题的方法?

【问题讨论】:

【参考方案1】:

好吧,既然我必须找到前进的道路,我即兴创作。我在内部创建了一个带有 pywin32 破解版的 git 存储库,它将使用标准 setup.py 脚本安装在 virtualenv 中。花了很多时间才能让它正常工作,但我设法让它加载,依赖代码现在可以按我的需要工作。如果人们觉得这对社区有好处,请发表评论:如果我得到足够的东西,我会尝试在我的 github 帐户上放一些东西。

【讨论】:

我也喜欢看看那个 repo 你能至少列出你包含在 repo 中的文件吗? 这是一个糟糕的、反社区的答案,拥有 33k+ 的声誉,你应该知道得更多。 “接受”的答案来自 OP 说,“没关系,所有帮助并通过谷歌来到这里的人,我修复了它,但我太忙了,无法向你展示如何。”我不讨厌,因为我去过那里。我只好叫出来了,因为我希望有人有礼貌地叫我出来。【参考方案2】:

我发现http://old.nabble.com/Windows:-virtualenv-and-pywin32--td27658201.html(现在是死链接)提供了以下解决方案:

    浏览http://sourceforge.net/projects/pywin32/files/ 获取所需exe 的URL 激活您的虚拟环境 运行easy_install http://PATH.TO/EXE/DOWNLOAD

这适用于现代版本的 setuptools(大约 2014 年 2 月,由 tovmeod 在 cmets 中报告)。


如果您使用的是旧版本的 setuptools(或将其合并回 setuptools 分发),您可能会收到以下错误消息:

错误:c:\users\blah\appdata\local\temp\easy_install-ibkzv7\pywin32-214.win32-py2.6.exe 不是有效的 distutils Windows .exe

在这种情况下:

    自行下载exe 激活您的虚拟环境 运行easy_install DOWNLOADED_FILE.exe

我宁愿尝试“pip install”而不是“easy_install”,但这没有奏效,而且可能永远不会奏效(需要引用)。


最后,我在http://www.mail-archive.com/python-list@python.org/msg272040.html 找到但尚未测试过的解决方案是:

通过将 pywin32.pth 文件复制到我的 virtualenv 站点包中解决了这个问题 并编辑文件以指向路径。

如果其他选项对您不起作用,也许这会?

【讨论】:

具体来说,下载 pywin32 .exe 安装程序,然后在 .exe 文件上执行 easy_install -Z-Z 可能不是必需的,但我总是这样做。 @KevinHorn:不,你是对的,-Z 不是必需的,我只是尝试过。谢谢! 使用了 easy_install "garr.dl.sourceforge.net/project/pywin32/pywin32/Build%20218/…" 并且在 virtualenv 中运行良好 @tovmeod 说得很好,现在 Distribute 和 setuptools 已经合并了它应该很神奇 :) 我会更新答案 我意识到这是一篇较旧的帖子,我很少发帖到 SO.... 但是,我只想说谢谢@d3vid 我有一个 x64 Win10 设置,我有由于愚蠢的注册表错误,无法安装 pywin32。谢谢谢谢谢谢。【参考方案3】:

这可能比上一个答案有所改进,因为我已经在几台机器上的沙盒上成功安装了 pywin32,没有任何特定的“黑客”:

$ virtualenv sandbox
$ sandbox\scripts\activate
(sandbox) $ git clone https://github.com/Travis-Sun/pywin32.git
(sandbox) $ cd pywin32
(sandbox) $ python setup.py install

在以下环境中测试:

Windows 7 混帐 带有 virtualenv 的 python 2.7.10 VS2008。它也可能适用(但我还没有测试过) http://www.microsoft.com/en-us/download/details.aspx?id=44266

【讨论】:

【参考方案4】:

编辑:暂时先解决这个问题,安装似乎还有一些问题......

我对整个情况感到相当厌倦,只是创建了一组转换后的***(“wheel convert <.exe>”)。我会尽量让它们保持最新版本,但如果有任何问题,请大声疾呼。

https://tr00st.co.uk/python/wheel/pywin32/

使用 pip 并指向与您的版本和架构匹配的包可以轻松完成安装。例如,对于 Python 3.5/amd64:

点安装https://tr00st.co.uk/python/wheel/pywin32/pywin32-219-cp35-none-win_amd64.whl

警告:--upgrade 过程当前失败,因为卸载过程无法自行清理(清理 win32api.pyd 时拒绝访问) - 仅在删除临时目录时,可以手动删除。解决此问题的最简单方法是卸载并重新安装而不是升级,然后手动删除临时文件夹。

【讨论】:

【参考方案5】:

对于 Python 2.7 或 3.x,请使用 pypiwin32

pip install pypiwin32

【讨论】:

这似乎有效,因为它让我通过了简单的pip install pywin32 得到的错误Could not find a version that satisfies the requirement pywin32 (from versions: )。但是,现在我得到了ImportError: DLL load failed: The specified module could not be found.,即使我在我的sys.path 中看到了win32。有什么想法吗? 它的答案有点晚,但为什么不呢。 pywin32 对你的 python 版本非常敏感。使用 pip 它应该可以很好地识别您的 python 版本,但显然它没有。这就是为什么您会收到 DLL 错误,因为安装的 pywin32 与您的 python 版本不对应。所以对我有用的是从我在lfd.uci.edu/~gohlke/pythonlibs(非官方网站)找到的 whl 文件中安装它

以上是关于如何在不包含主机环境的站点包文件夹的情况下将 pywin32 与 virtualenv 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不包含节点模块文件夹的情况下将我的 React 项目上传到 GitHub [重复]

如何在不使用存储库的情况下将Docker镜像从一个主机复制到另一个主机

如何在不使用包的情况下将BERT模型下载到本地?

如何在不在线公开的情况下将文件存储在 Wordpress 插件中?

如何在不使用 import_url 的情况下将特定文件导入新创建的 Gitlab 项目?

python whl是啥文件