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

时间:2009-12-02 02:31:04

标签: python winapi virtualenv pyinstaller

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

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

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

5 个答案:

答案 0 :(得分:74)

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

  1. 浏览http://sourceforge.net/projects/pywin32/files/以获取您想要的文字的网址
  2. 激活你的virtualenv
  3. 运行easy_install http://PATH.TO/EXE/DOWNLOAD
  4. 这适用于现代版本的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. 激活你的virtualenv
    3. 运行easy_install DOWNLOADED_FILE.exe

    4. 我更希望尝试“pip install”而不是“easy_install”,但这不起作用,可能永远不会(引用需要)。


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

        

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

      如果其他选项对您不起作用,可能会这样吗?

答案 1 :(得分:12)

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

pip install pypiwin32

答案 2 :(得分:4)

好吧,好吧,因为我必须找到前进的方法,我即兴创作。我在内部创建了一个git存储库,其中包含一个黑客合并版本的pywin32,它将使用标准setup.py脚本安装在virtualenv中。它需要花费大量时间才能使其正常工作,但我设法让它加载,依赖代码现在可以正常工作。如果人们觉得这会对社区有益,请发表评论:如果我得到足够的话,我会尝试在我的github帐户上放一些东西。

答案 3 :(得分:0)

自从之前的回答以来,这可能已经有所改进,因为我已经在几台机器上的沙盒上成功安装了pywin32而没有任何特定的" hacks" :

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

使用以下环境进行测试:

答案 4 :(得分:0)

编辑:暂时解决这个问题,安装问题似乎仍然存在......

我对整个情况感到厌倦,只是创建了一组转换后的轮子("轮转换< .exe>")。我会尝试让它们保持最新版本,但如果有任何问题请大声说。

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

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

pip install https://tr00st.co.uk/python/wheel/pywin32/pywin32-219-cp35-none-win_amd64.whl

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