Hi,

On Mon, Nov 19, 2012 at 12:11 AM, Matthew Brett <[email protected]> wrote:
> Hi,
>
> On Mon, Nov 19, 2012 at 12:01 AM, Aaron Meurer <[email protected]> wrote:
>> On Sun, Nov 18, 2012 at 11:19 PM, Matthew Brett <[email protected]>
>> wrote:
>>>
>>> Hi,
>>>
>>> On Sun, Nov 18, 2012 at 6:48 PM, Aaron Meurer <[email protected]> wrote:
>>> > On Sun, Nov 18, 2012 at 3:16 PM, Matthew Brett <[email protected]>
>>> > wrote:
>>> >>
>>> >> Hi,
>>> >>
>>> >> On Sun, Nov 18, 2012 at 2:06 PM, Aaron Meurer <[email protected]>
>>> >> wrote:
>>> >> > On Sat, Nov 17, 2012 at 8:46 PM, Matthew Brett
>>> >> > <[email protected]>
>>> >> > wrote:
>>> >> >>
>>> >> >> Hi,
>>> >> >>
>>> >> >> On Sat, Nov 17, 2012 at 6:51 PM, Aaron Meurer <[email protected]>
>>> >> >> wrote:
>>> >> >> > On Nov 17, 2012, at 7:39 PM, Matthew Brett
>>> >> >> > <[email protected]>
>>> >> >> > wrote:
>>> >> >> >
>>> >> >> >> Hi,
>>> >> >> >>
>>> >> >> >> I've been running into trouble installing sympy with easy_install
>>> >> >> >> and
>>> >> >> >> pip on python 2.7 and Python 3.3.
>>> >> >> >
>>> >> >> > What issues with pip are you having?  I thought we fixed pip to do
>>> >> >> > the
>>> >> >> > right thing.
>>> >> >>
>>> >> >> Ah - I have a strong memory that I had issues with pip, but not now
>>> >> >> I
>>> >> >> test it on this machine.  Broken for easy_install (via distribute):
>>> >> >
>>> >> >
>>> >> > That's because pip *was* broken, but we figured out how to fix it.
>>> >> > The
>>> >> > trick was adding -py3.2 and so on to the tarball names so that it was
>>> >> > sure
>>> >> > to download the right one.
>>> >> >
>>> >> >>
>>> >> >>
>>> >> >> mb312@mikesilver ~]$ mkvirtualenv py27 --no-site-packages
>>> >> >> New python executable in py27/bin/python
>>> >> >> Installing setuptools.............done.
>>> >> >> Installing pip...............done.
>>> >> >> [mb312@mikesilver ~]$ workon py27
>>> >> >> (py27)[mb312@mikesilver ~]$ easy_install sympy
>>> >> >> Searching for sympy
>>> >> >> Reading http://pypi.python.org/simple/sympy/
>>> >> >> Reading http://code.google.com/p/sympy
>>> >> >> Reading http://sympy.org
>>> >> >> Reading http://sympy.org/
>>> >> >> Reading
>>> >> >>
>>> >> >> http://code.google.com/p/sympy/downloads/detail?name=sympy-0.7.0.tar.gz
>>> >> >> Best match: sympy 0.7.2-py3.3
>>> >> >> Downloading
>>> >> >>
>>> >> >>
>>> >> >> http://pypi.python.org/packages/source/s/sympy/sympy-0.7.2-py3.3.tar.gz#md5=4645f4bd3c50dac7486ccfaedbb29057
>>> >> >> Processing sympy-0.7.2-py3.3.tar.gz
>>> >> >> Running sympy-0.7.2/setup.py -q bdist_egg --dist-dir
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> /var/folders/YB/YBjJ+eaQGb0EZfa9PJfcSk+++Tg/-Tmp-/easy_install-n5AKga/sympy-0.7.2/egg-dist-tmp-WFXCnm
>>> >> >> Traceback (most recent call last):
>>> >> >>   File "/Users/mb312/.virtualenvs/py27/bin/easy_install", line 8, in
>>> >> >> <module>
>>> >> >>     load_entry_point('setuptools==0.6c11', 'console_scripts',
>>> >> >> 'easy_install')()
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py",
>>> >> >> line 1712, in main
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py",
>>> >> >> line 1700, in with_ei_usage
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py",
>>> >> >> line 1716, in <lambda>
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py",
>>> >> >> line 152, in setup
>>> >> >>     dist.run_commands()
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py",
>>> >> >> line 953, in run_commands
>>> >> >>     self.run_command(cmd)
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py",
>>> >> >> line 972, in run_command
>>> >> >>     cmd_obj.run()
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py",
>>> >> >> line 211, in run
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py",
>>> >> >> line 446, in easy_install
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py",
>>> >> >> line 476, in install_item
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py",
>>> >> >> line 655, in install_eggs
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py",
>>> >> >> line 930, in build_and_install
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py",
>>> >> >> line 919, in run_setup
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py",
>>> >> >> line 62, in run_setup
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py",
>>> >> >> line 105, in run
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/mb312/.virtualenvs/py27/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py",
>>> >> >> line 64, in <lambda>
>>> >> >>   File "setup.py", line 36, in <module>
>>> >> >>   File
>>> >> >>
>>> >> >>
>>> >> >> "/var/folders/YB/YBjJ+eaQGb0EZfa9PJfcSk+++Tg/-Tmp-/easy_install-n5AKga/sympy-0.7.2/sympy/__init__.py",
>>> >> >> line 27, in <module>
>>> >> >> ImportError: It appears 2to3 has been run on the codebase. Use
>>> >> >> Python
>>> >> >> 3 or get the original source code.
>>> >> >
>>> >> >
>>> >> > ARGH! I did not know this.  It seems that the same solution for pip
>>> >> > is
>>> >> > the
>>> >> > problem for easy_install.  It thinks that sympy-0.7.2-py3.3 is the
>>> >> > latest
>>> >> > version.
>>> >> >
>>> >> > Any thoughts on how this can be fixed?  I've said this before, but it
>>> >> > deserves reiterating: I as a package maintainer have surprisingly
>>> >> > little
>>> >> > control over what pip or easy_install install.  The best I can do is
>>> >> > to
>>> >> > manipulate what links are on PyPI and to use naming trickery to make
>>> >> > it
>>> >> > install the "latest" version.
>>> >> >
>>> >> > I created https://code.google.com/p/sympy/issues/detail?id=3511 for
>>> >> > this.
>>> >>
>>> >> How about having a sympy3 pypi project?
>>> >
>>> >
>>> > I hadn't thought of that.  If we did this, then it would never do the
>>> > right
>>> > thing in Python 3, i.e., the users would have to know to use "pip
>>> > install
>>> > sympy3" instead of "pip install sympy" in Python 3.  It might also
>>> > complicated stuff for people whose travis.ini (or whatever) would
>>> > otherwise
>>> > just have a single pip install line.
>>>
>>> Maybe it would be OK if there was a suitable error message from an
>>> attempted pip install sympy in python 3?  Sorry - I'm not sure that's
>>> the best solution, just throwing it out there.
>>
>>
>> There is, though admittedly it could be better:
>>
>> $python3 setup.py # python 2 setup.py
>> Traceback (most recent call last):
>>   File "setup.py", line 36, in <module>
>>     import sympy
>>   File "/Users/aaronmeurer/Documents/Python/sympy/sympy/sympy/__init__.py",
>> line 35, in <module>
>>     raise ImportError("This is the Python 2 version of SymPy. To use SymPy "
>> ImportError: This is the Python 2 version of SymPy. To use SymPy with Python
>> 3, please obtain a Python 3 version from http://sympy.org, or use the
>> bin/use2to3 script if you are using the git version.
>>
>> $python2 setup.py # python2 setup.py
>> Traceback (most recent call last):
>>   File "setup.py", line 36, in <module>
>>     import sympy
>>   File
>> "/Users/aaronmeurer/Documents/Python/sympy/sympy/py3k-sympy/sympy/__init__.py",
>> line 27, in <module>
>>     raise ImportError("It appears 2to3 has been run on the codebase. Use "
>> ImportError: It appears 2to3 has been run on the codebase. Use Python 3 or
>> get the original source code.
>>
>> In particular, I don't think users care about use2to3, and it's just
>> confusing.
>>
>>>
>>>
>>> I agree it might be more complicated to sort out in travis, but people
>>> in the position of writing a travis file for multiple pythons are
>>> likely to be up to that task I would have thought.
>>>
>>> >> >> We use easy_install much more than pip because pip will not install
>>> >> >> binaries, and so is more or less useless for compiled packages.
>>> >> >
>>> >> >
>>> >> > My best suggestion for this is to use pip for SymPy and easy_install
>>> >> > for
>>> >> > the
>>> >> > rest.  Or you could just pass the url manually to eas_install. If you
>>> >> > can
>>> >> > figure out how to name the tarballs so that pip *and* easy_install do
>>> >> > the
>>> >> > right thing, I'd love to hear it.  But I'm very doubtful that a
>>> >> > solution
>>> >> > exists.  The Python packaging ecosystem is irrevocably broken as far
>>> >> > as
>>> >> > I'm
>>> >> > concerned.
>>> >>
>>> >> Tell it brother :)  And yes of course it throws the burden for the
>>> >> workarounds onto each package maintainer, which is tiring and
>>> >> wasteful.  But nevertheless, it can be made to work, by doing 2to3 in
>>> >> the setup.py.
>>> >>
>>> >>
>>> >> >>
>>> >> >>
>>> >> >> >> The fact that easy_install / pip is unlikely to work means that
>>> >> >> >> sympy
>>> >> >> >> is a considerably heavier burden for our (nipy.org/nipy) users to
>>> >> >> >> install, and I'd very much like to help fix that.
>>> >> >> >>
>>> >> >> >> This led me to start editing the sympy setup.py to do the
>>> >> >> >> standard
>>> >> >> >> thing of running 2to3 during setu.py install : (e.g numpy, scipy,
>>> >> >> >> matplotlib, our projects).
>>> >> >> >>
>>> >> >> >> I immediately found why you haven't done this:  you depend on
>>> >> >> >> running
>>> >> >> >>
>>> >> >> >> python setup.py run_tests
>>> >> >> >>
>>> >> >> >> and
>>> >> >> >>
>>> >> >> >> python setup.py run_benchkmarks
>>> >> >> >>
>>> >> >> >> in the source tree.   So, there's no way of running these for
>>> >> >> >> python
>>> >> >> >> 2
>>> >> >> >> and python 3 in the same source tree (unless you go for python 3
>>> >> >> >> compatibility in source - a bit much).
>>> >> >> >>
>>> >> >> >> So - I'm writing to ask if you'd consider looking at a refactor
>>> >> >> >> that
>>> >> >> >> would change these calls above to:
>>> >> >> >>
>>> >> >> >> python setup.py install --user (or whatever)
>>> >> >> >> cd /somewhere
>>> >> >> >> python -c 'import sympy; sympy.test()'
>>> >> >> >
>>> >> >> > The problem is that setup.py test runs tests that aren't included
>>> >> >> > in
>>> >> >> > an install, namely the Sphinx doctests.
>>> >> >>
>>> >> >> Would it be an option to run these separately?  For example with
>>> >> >>
>>> >> >> python setup.py run_doctests
>>> >> >>
>>> >> >> ? Or maybe with
>>> >> >>
>>> >> >> python setup.py run_tests
>>> >> >>
>>> >> >> where ``run_tests`` does something like:
>>> >> >>
>>> >> >> mkdir tmp
>>> >> >> cd tmp
>>> >> >> python -c 'import sympy; sympy.test()'
>>> >> >> cd ..
>>> >> >> cd doc
>>> >> >> make.py doctest
>>> >> >
>>> >> >
>>> >> > setup.py test just runs all combinations of tests, which already have
>>> >> > their
>>> >> > individual scripts. I think right now it's equivalent to something
>>> >> > like
>>> >> >
>>> >> > ./bin/test
>>> >> > ./bin/doctest
>>> >> > <whatever the sage test script is>
>>> >> > ./examples/all.py -q
>>> >> >
>>> >> > Actually, it just runs sympy.utilities.runtests.run_all_tests(),
>>> >> > which
>>> >> > is
>>> >> > itself a wrapper to the above tests.  So there is actually no need
>>> >> > for
>>> >> > anything in the setup.py script itself to do tests.  It's just a nice
>>> >> > shortcut for us.
>>> >>
>>> >> RIght - I think I'm asking whether you'd consider moving from:
>>> >>
>>> >> python setup.py run_tests
>>> >>
>>> >> to
>>> >>
>>> >> python setup.py install
>>> >> python setup.py run_tests
>>> >>
>>> >> in order to make it possible to processing the source tree (for
>>> >> compiled code or 2to3) before running?
>>> >
>>> >
>>> > Am I misunderstanding what you're asking for?  Would you run the tests
>>> > against the installed version or the local version?
>>>
>>> Yes, the point would be to run the tests against the version on the
>>> path, whatever that was, not the local version.   So attempting to run
>>> the tests without an install of some sort (including 'develop') would
>>> get a message on the lines of
>>>
>>> "Please install sympy on the python path before running tests; see
>>> http:/blah/blah"
>>
>>
>> OK.  Well, like I said, this won't work because we test things that aren't
>> installed, namely, the Sphinx documentation doctests.  Actually, the
>> examples are not installed (but they are included in the tarball).  Also, it
>> seems like an unnecessary restriction to make people use virtualenv to test
>> SymPy when it's not actually necessary.
>
> OK.  I think I'm not seeing why it won't work, because I'm suggesting
> `python setup.py run_tests` from the source tree, the only difference
> being there would have to be some sort of install of the 'sympy'
> library code first.

Sorry - I do see what you mean now - you mean that the sphinx doctests
and examples would not get 2to3 processed via a simple 'install' so
can't be tested in python 3.  We've gone to requiring python 2.6 for
our examples and making them compatible with python 3 - not a big
problem, but a problem.  I guess you could also use a numpy-like py3k
setup.py trick to process only the changed examples, sphinx docs into
a py3k-sympy directory and running tests from there.  As I say, I'm
happy to try and work out how to make that happen if you're
interested.

Cheers,

Matthew

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to