On Tue, Nov 15, 2011 at 1:08 PM, Maciej Fijalkowski <fij...@gmail.com>wrote:

> On Tue, Nov 15, 2011 at 8:03 PM, Alex Gaynor <alex.gay...@gmail.com>
> wrote:
> >
> >
> > On Tue, Nov 15, 2011 at 12:56 PM, Blaine <frik...@gmail.com> wrote:
> >>
> >> Hi everyone. I have a cellular automata framework in C++ and I use
> cython
> >> and cpython to run it. I found out that if I port it to pure python and
> run
> >> it with pypy, it's close to the same performance as the C++ version.
> (about
> >> 2x as slow, compared to 20x as slow when using pure python + cpython).
> When
> >> I throw in other overheads with pure python libraries, using the pure
> python
> >> and pypy is much faster than cpython with the C++ library, all things
> equal.
> >> What I'd like to do is detect if pypy or cpython is doing the importing
> of
> >> my module, and switch over to the pure python interface if pypy is
> found. As
> >> it stands I have to do it manually in my module's __init__.py.
> >> Is there any way to detect if my module is being imported by pypy vs
> >> cpython? Either via sys, or maybe some latent variable that is present,
> or
> >> something else. sys.argv[0] only has the script name (obviously), not
> the
> >> interpreter call.
> >> Keep up the outstanding work. Pypy is great!
> >> Thanks!
> >> Blaine
> >>
> >> _______________________________________________
> >> pypy-dev mailing list
> >> pypy-dev@python.org
> >> http://mail.python.org/mailman/listinfo/pypy-dev
> >>
> >
> > The canonical way is probably `import platform;
> > platform.python_implementation()` which will return either "PyPy" or
> > "CPython".
> > Alex
>
> If you need to support older pythons (which don't have
> platform.python_implementation), we use
>
> import sys
> is_pypy = '__pypy__' in sys.builtin_module_names
>
> or alternatively:
>
> try:
>  import __pypy__
> except ImportError:
>  __pypy__ = None
>
> >
> > --
> > "I disapprove of what you say, but I will defend to the death your right
> to
> > say it." -- Evelyn Beatrice Hall (summarizing Voltaire)
> > "The people's good is the highest law." -- Cicero
> >
> >
> > _______________________________________________
> > pypy-dev mailing list
> > pypy-dev@python.org
> > http://mail.python.org/mailman/listinfo/pypy-dev
> >
> >
>

And don't forget `hasattr(sys, "pypy_translation_info")` just for
completeness, platform is the cleanest IMO though :)

Alex

-- 
"I disapprove of what you say, but I will defend to the death your right to
say it." -- Evelyn Beatrice Hall (summarizing Voltaire)
"The people's good is the highest law." -- Cicero
_______________________________________________
pypy-dev mailing list
pypy-dev@python.org
http://mail.python.org/mailman/listinfo/pypy-dev

Reply via email to