When you create a pure Python sandbox using
virtualenv --no-site-packages the global
site-packages directory is rightfully not included … however, this poses a challenge in accessing non-trivial packages from within the virtualenv. While packages such as PyQt4 can be reinstalled into the virtualenv using
pypm -E C:\myvenv install pyqt4, that is not true for PyWin32 which is included with the ActivePython distribution itself.
C:\> virtualenv --no-site-packages C:\myenv C:\> C:\myenv\Scripts\python.exe >>> import win32api Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named win32api >>>
Fortunately, there is a simple workaround to get around this problem.
C:\> copy C:\Python27\Lib\site-packages\pywin32.pth C:\myenv\Lib\site-packages\ C:\> more C:\myenv\Lib\site-packages\pywin32.pth # .pth file for the PyWin32 extensions win32 win32\lib Pythonwin C:\>
Now simply edit this file (in your text editor, eg: IDLE) to contain the absolute paths:
# .pth file for the PyWin32 extensions C:\Python27\Lib\site-packages\win32 C:\Python27\Lib\site-packages\win32\lib C:\Python27\Lib\site-packages\Pythonwin
That’s it — you can now
import pywin32 from the newly created virtualenv and still exclude the packages in your global site-packages directory.
C:\myenv\Scripts\python.exe >>> import win32api >>>
All of this can be automated by using Fabric and fablib – which also copies other pywin32 packages, such as win32com.