来自Andrew Delong的博客
http://andrewdelong.wordpress.com/2012/11/03/pythonc-in-visual-studio-an-alternative-to-matlabmex/
I spent much of my PhD working in Matlab with C++ MEX extensions. Debugging
MEX extensions is frustrating: either you resort to print statements, or you
wait for the IDE to launch a new Matlab every time you make a change.
With Microsoft’s release of Python Tools for Visual Studio,
I decided to switch to Python with C++ extensions.
The integration is exactly what I was looking
for: full debugging, auto-complete, real-time syntax checking, python console
(like Matlab), and profiling (needs Ultimate Edition of Visual Studio). Python
can load C++ extensions built with Visual Studio 2010/2012 just fine, even
though Win64 Python is itself compiled with Visual Studio 2008; the new
compilers are amust for using the wonderful features of C++11
.
Getting a Matlab-like setup for Win64 takes a few steps. For Linux, one has
the option of simply installing Free
64-bit EPD Python, a Python distribution that bundles several
packages for scientific computing (plotting, matrices, Intel MKL). 64-bit EPD
does not seem to be free for Windows users. So, the rest of this post is a guide
to set things up from scratch.
1. Install Python
- Download Python 2.7 X86-64 and
install it to the default location. - Make sure C:\Python27 is in your system path: open a command-prompt and
run “python”; use “quit()” to exit the interpreter. - Add PYTHON_PATH=C:\Python27 to your system environment variables. (This
will be convenient when setting up Visual Studio projects that link with
Python, e.g. a C/C++ extension module).
2. Install Numpy-MKL and SciPy
- Download Numpy-MKL
64-bit and install it. - Download SciPy
64-bit and install it.
3. Install Matplotlib
- Download the latest Matplotlib-win-amd64-python2.7 and
install it. - Test it by starting a python interpreter and running the commands
import matplotlob
import matplotlib.pyplot as plt
plt.plot([1,2,2,3])
plt.show()You should see a Figure window pop up.
- [Optional] If you are annoyed by the 4-pixel grey margin around all figure
windows,
openC:\Python27\Lib\site-packages\matplotlib\backends\backend_tkagg.pyand
find the place where it says “borderwidth=4
“, then replace
this
with “borderwidth=0, highlightthickness=0
“.
4. Install Visual Studio
If you are a student or staff at a university, you can get a free license for
Visual Studio Ultimate Edition (2010 or 2012) by getting a Microsoft DreamSpark
account through your department. However, these steps should work just fine with
the free Express Edition of Visual Studio as well. (Note that Python/C++ speed
profiling is only available in Ultimate Edition).
5. Install Python Tools for Visual Studio
Download Python Tools for
Visual Studio and install. Be sure to get the version for the IDE
you want to use (i.e. 2010 or 2012).
To see the new Python console, go to View->Other Windows and select
it. You can dock the new tool window with the rest.
Also enable the Python Debug Interactive window in Debug->Windows.
Notes
As of PTVS 2.0 Beta, mixed C++/Python debugging is available in VS 2012
or later. By default, breakpoints will only work in either
Python or C++ during any one debugging session — if you debug
using a Python “startup project”, breakpoints in your C++ code will be ignored
for that debug session; if you debug a C++ “startup project”, your Python
breakpoints will be ignored. If you want mixed debugging, you must explicitly
enable it in your Python project’s Debug settings (VS2012 only).
Tip #1: Python code will run slower when debugging; I find Ctrl+F5 (run
without debugging) immensely useful when I’m not planning to hit any
breakpoints.
Tip #2: By default Visual Studio will break when Python exceptions are
thrown. This is a problem because many Python modules use exceptions as a means
of ‘normal’ control flow (bad!), so you’ll want to tell the debugger to let most
exceptions slide. Go to Tools->Options->Debugging and select “Enable Just
My Code”.
Then go to Debug->Exceptions and uncheck the “Thrown” column for
Python
If a package imports “without debugging” but breaks when you run it “with
debugging” then you may even have to disable breaking on a User-unhandled
exception.
Python/C++ in Visual Studio: An Alternative to
Matlab/MEX