I can't find this in the archives. Is there something not right with mingw/msys? [I need to get vcvarsall.bat fixed, so I can install other packages.]
Failure to install python package 'twisted' using pip.exe.
I have python2.6 and mingw/msys installed.
%PATH% includes C:\MinGW\
and C:\MinGW\mingw32\bin
first: pip.exe install twisted
fails by saying error: Unable to find vcvarsall.bat
I create file G:\Programs (x86)\Python 2.6\Lib\distutils\distutils.cfg
, which contains:
[build]
compiler=mingw32
Now the error I get is:
g:\Programs (x86)\Python 2.6>python Scripts\pip-script.py install twisted
Downloading/unpacking twisted
Running setup.py egg_info for package twisted
Downloading/unpacking zope.interfac开发者_运维技巧e (from twisted)
Running setup.py egg_info for package zope.interface
Requirement already satisfied (use --upgrade to upgrade): setuptools in g:\progr
ams (x86)\python 2.6\lib\site-packages (from zope.interface->twisted)
Installing collected packages: twisted, zope.interface
Running setup.py install for twisted
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall "-Ig:\Programs (x86)\Python
2.6\include" "-Ig:\Programs (x86)\Python 2.6\PC" -c conftest.c -o conftest.o
conftest.c:1:21: fatal error: rpc/rpc.h: No such file or directory
compilation terminated.
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall "-Ig:\Programs (x86)\Python
2.6\include" "-Ig:\Programs (x86)\Python 2.6\PC" -c conftest.c -o conftest.o
conftest.c:1:23: fatal error: sys/epoll.h: No such file or directory
compilation terminated.
building 'twisted.protocols._c_urlarg' extension
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -DWIN32=1 "-Ig:\Programs (x8
6)\Python 2.6\include" "-Ig:\Programs (x86)\Python 2.6\PC" -c twisted/protocols/
_c_urlarg.c -o build\temp.win32-2.6\Release\twisted\protocols\_c_urlarg.o
twisted/protocols/_c_urlarg.c: In function 'unquote':
twisted/protocols/_c_urlarg.c:41:50: warning: 'tmp' may be used uninitialize
d in this function
C:\MinGW\bin\dllwrap.exe -mno-cygwin -mdll -static --output-lib build\temp.w
in32-2.6\Release\twisted\protocols\lib_c_urlarg.a --def build\temp.win32-2.6\Rel
ease\twisted\protocols\_c_urlarg.def -s build\temp.win32-2.6\Release\twisted\pro
tocols\_c_urlarg.o "-Lg:\Programs (x86)\Python 2.6\libs" "-Lg:\Programs (x86)\Py
thon 2.6\PCbuild" -lpython26 -lmsvcr90 -o build\lib.win32-2.6\twisted\protocols\
_c_urlarg.pyd
_c_urlarg.exp: file not recognized: File format not recognized
collect2: ld returned 1 exit status
dllwrap: gcc exited with status 1
error: command 'dllwrap' failed with exit status 1
Complete output from command "g:\Programs (x86)\Python 2.6\python.exe" -c "i
mport setuptools;__file__='g:\\Programs (x86)\\Python 2.6\\build\\twisted\\setup
.py';execfile(__file__)" install --single-version-externally-managed --record c:
\users\jake\appdata\local\temp\pip-3y_c1e-record\install-record.txt:
running install
running build
running build_py
running egg_info
writing requirements to Twisted.egg-info\requires.txt
writing Twisted.egg-info\PKG-INFO
writing top-level names to Twisted.egg-info\top_level.txt
writing dependency_links to Twisted.egg-info\dependency_links.txt
reading manifest file 'Twisted.egg-info\SOURCES.txt'
writing manifest file 'Twisted.egg-info\SOURCES.txt'
running build_ext
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall "-Ig:\Programs (x86)\Python 2.6\
include" "-Ig:\Programs (x86)\Python 2.6\PC" -c conftest.c -o conftest.o
conftest.c:1:21: fatal error: rpc/rpc.h: No such file or directory
compilation terminated.
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall "-Ig:\Programs (x86)\Python 2.6\
include" "-Ig:\Programs (x86)\Python 2.6\PC" -c conftest.c -o conftest.o
conftest.c:1:23: fatal error: sys/epoll.h: No such file or directory
compilation terminated.
building 'twisted.protocols._c_urlarg' extension
C:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -DWIN32=1 "-Ig:\Programs (x86)\P
ython 2.6\include" "-Ig:\Programs (x86)\Python 2.6\PC" -c twisted/protocols/_c_u
rlarg.c -o build\temp.win32-2.6\Release\twisted\protocols\_c_urlarg.o
twisted/protocols/_c_urlarg.c: In function 'unquote':
twisted/protocols/_c_urlarg.c:41:50: warning: 'tmp' may be used uninitialized in
this function
writing build\temp.win32-2.6\Release\twisted\protocols\_c_urlarg.def
C:\MinGW\bin\dllwrap.exe -mno-cygwin -mdll -static --output-lib build\temp.win32
-2.6\Release\twisted\protocols\lib_c_urlarg.a --def build\temp.win32-2.6\Release
\twisted\protocols\_c_urlarg.def -s build\temp.win32-2.6\Release\twisted\protoco
ls\_c_urlarg.o "-Lg:\Programs (x86)\Python 2.6\libs" "-Lg:\Programs (x86)\Python
2.6\PCbuild" -lpython26 -lmsvcr90 -o build\lib.win32-2.6\twisted\protocols\_c_u
rlarg.pyd
_c_urlarg.exp: file not recognized: File format not recognized
collect2: ld returned 1 exit status
dllwrap: gcc exited with status 1
warning: manifest_maker: standard file '-c' not found
error: command 'dllwrap' failed with exit status 1
----------------------------------------
Command "g:\Programs (x86)\Python 2.6\python.exe" -c "import setuptools;__file__
='g:\\Programs (x86)\\Python 2.6\\build\\twisted\\setup.py';execfile(__file__)"
install --single-version-externally-managed --record c:\users\jake\appdata\local
\temp\pip-3y_c1e-record\install-record.txt failed with error code 1
Storing complete log in C:\Users\jake\AppData\Roaming\pip\pip.log
This is likely a bug with Python. See http://bugs.python.org/issue2698
Meanwhile, you could install ActivePython and install Twisted via PyPM (no compilers needed).
Alternatively, you can use the official binary ... though I recommend the aforementioned solution as you can easily 'upgrade' to newer versions of Twisted in future.
The question: why does dllwrap give this error within pip?
_foo.exp: file not recognized: File format not recognized
Short answer: check your PATH. MinGW\bin needs to be near the start of it.
Long answer: For a while I was using a work around. I grabbed the dllwrap command from the pip.log and executed it directly. That built the .pyd and enabled pip install to finish off the job.
I passed the --verbose flag into these two different ways of calling dllwrap. Under pip this was being done.
dlltool: Opened temporary file: dumlc.s
dlltool: run: as -o _bcrypt.exp dumlc.s
dlltool: Generated exports file
Calling dllwrap from the command line gave this.
C:\MinGW\bin\dlltool: Opened temporary file: demmc.s
C:\MinGW\bin\dlltool: run: C:\MinGW\bin\as -o _bcrypt.exp demmc.s
C:\MinGW\bin\dlltool: Generated exports file
My computer is running Windows 7 64-bit but with 32-bit Python 2.7. It is new but seems to have the AMD APP SDK pre-installed. That has an as.exe which defaults to 64-bit output.
My fix was to edit the PATH so that C:\MinGW\bin is ahead of C:\Program Files (x86)\AMD APP\bin\x86_64
This problem could be fixed more robustly in the Python code though I have not pinned down where in virtualenv, pip or distutils that should be done.
There are two other things needed to build extensions using MinGW which I'll repeat here briefly.
Configure distutils to use the MinGW compiler
This can be done in a variety of files or command line switches. I opted for a file in my home directory.
$ cat ~/pydistutils.cfg
[build]
compiler = mingw32
Patch distutils to eliminate the -mno-cygwin switch
As admininistrator edit Lib/distutils/cygwinccompiler.py. Delete the four -mno-cygwin options.
s/ -mno-cygwin//
-mno-cygwin has been deprecated in gcc for a while and is now an error.
See http://bugs.python.org/issue12641
On Windows, I have installed Visual Studio 2008 (vcsetup.exe) to go around this problem.
updated link: http://www.microsoft.com/en-us/download/details.aspx?id=15336
If using Python 3.3 you can use Visual Studio 2010
精彩评论