如何在不包含主机环境的站点包文件夹的情况下将 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镜像从一个主机复制到另一个主机
如何在不在线公开的情况下将文件存储在 Wordpress 插件中?