54

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

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

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

4

5 回答 5

77

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

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

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


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

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

在这种情况下:

  1. 自己下载exe
  2. 激活你的虚拟环境
  3. easy_install DOWNLOADED_FILE.exe

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


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

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

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

于 2010-03-23T14:09:21.793 回答
13

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

pip install pypiwin32

于 2016-06-30T11:14:20.073 回答
4

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

于 2009-12-02T08:13:13.430 回答
0

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

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

经以下环境测试:

于 2015-11-18T10:53:44.827 回答
0

编辑:暂时从头开始,安装似乎仍然存在一些问题......

我已经厌倦了整个情况,并创建了一组转换后的轮子(“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 时拒绝访问) - 这仅在删除临时目录时,可以手动删除。解决此问题的最简单方法是卸载并重新安装而不是升级,然后手动删除临时文件夹。

于 2015-12-03T10:14:01.947 回答