Fair enough.

The main problem is that I'm just not really into going back down the
rabbit hole and burn another few precious weekend days to setup new Windows
VMs and futz around with docker to test on various distros just to avoid
users having to type a single command to install dependencies, I already
burn that time, and I'm really busy. I deal with enough piping and plumbing
at work that on my own time I want to write brand new code fast and build
features or learn new things instead of spending all that time worrying
about packaging.

If you really care about this, and want to help, test your change on
Windows, Linux (Ubuntu, Debian, RedHat) and recent Mac OS X, and if all
pans out, I'll change it over. Otherwise my feeling is what's there -
distutils - is good enough.





On Thu, Oct 8, 2015 at 3:01 PM, Gary Peck <[email protected]>
wrote:

> Thanks. I'm not even sure how you can end up without setuptools installed
> with a modern python3 installation. I think as long as you require that the
> user has pip3 installed, through whatever means is appropriate to their
> OS/environment, it'll pull in setuptools.
>
> Gary
>
> On Wednesday, October 7, 2015 at 10:26:48 PM UTC-7, Martin Blais wrote:
>>
>> I created a ticket:
>>
>> https://bitbucket.org/blais/beancount/issues/72/consider-installing-with-setuptools-again
>>
>> It would need a lot more testing, e.g., on Windows, Mac, etc., in order
>> to make sure this works and if I recall all the crazy time I sunk into
>> this, I'm pretty sure I don't want to burn all that time all over again.
>> I'll reconsider it but it's at the very bottom of the list of things I need
>> to do. The price to pay to install the other dependencies explicitly is
>> really small IMO (and you don't have to install setuptools, which is a
>> plus).
>>
>>
>>
>>
>>
>>
>>
>> On Wed, Oct 7, 2015 at 6:44 PM, Gary Peck <[email protected]> wrote:
>>
>>>
>>>
>>> On Thursday, July 2, 2015 at 3:14:33 PM UTC-7, Martin Blais wrote:
>>>>
>>>> On Thu, Jul 2, 2015 at 3:23 PM, Martin Blais <[email protected]> wrote:
>>>>
>>>>>
>>>>> I'd been having problems with setup.py in that it's supposed to be
>>>>> able to install dependencies by default, so in theory you shouldn't have 
>>>>> to
>>>>> install anything but Beancount now. It hadn't been working before.
>>>>>
>>>>> Here's some background, in case anyone's interested: Python has two
>>>>> active supporting projects for packaging:
>>>>>
>>>>> (1) distutils, which comes with it in the stdlib, and
>>>>> (2) setuptools, which is newer and better, but which needs to be
>>>>> installed on top of the stdlib.
>>>>>
>>>>> There's a deep history of why that is and many projects have come and
>>>>> gone trying to make this better (e.g. distribute). The main issue with
>>>>> disutils is that it does not support automatic installation of 
>>>>> dependencies
>>>>> (it's really old but a ton of packages still depend on it, that's the 
>>>>> price
>>>>> of popularity). Setuptools does support it, the packager can declare
>>>>> dependencies and pip3 should be able to pull in and install all
>>>>> requirements automatically.  I could not get setuptools to install my
>>>>> dependencies due to a namespace collision with the 'parser' module (was my
>>>>> fault).
>>>>>
>>>>> Now that I've made changes, Beancount supports setuptools and installs
>>>>> dependencies automatically. If you don't have setuptools installed, it
>>>>> falls back on distutils (and you have to install the dependencies 
>>>>> manually,
>>>>> e.g. it's a one-liner:  "pip3 install python-dateutil lxml bottle ply").
>>>>>
>>>>
>>>> Okay, an update: the state of setuptools / distutils Python
>>>> distribution tools is in a really sorry state indeed. I've spend much of my
>>>> afternoon dealing with some more setuptools brokenness and running around
>>>> its sad, sad source code. When I use
>>>>
>>>>   python3 setup.py build_ext -i
>>>>
>>>> with setuptools installed, it puts the _parser.so library under
>>>> src/python and not under src/python/beancount/parser where it should be, so
>>>> that's a no go.
>>>>
>>>> This is using setuptools v15. Manually installing the latest v18 puts
>>>> the .so in the right place but there is an annoying warning about not
>>>> running it with pip3.
>>>>
>>>> #$&*# this. No seriously, I've had enough. I want to spend my time
>>>> building features instead of packaging, and I've wasted the better part of
>>>> a beautiful vacation day just dealing with setuptools and reading
>>>> conflicting information on the web. I'm ditching support for setuptools.
>>>>
>>>> Beancount will use distutils, which is basic, comes with all versions
>>>> of Python, and does the right thing by default. It's only drawback is that
>>>> you need to install the dependencies manually. It won't do the dependencies
>>>> automatically. It's a one-liner to install dependencies. No big deal in my
>>>> book.
>>>>
>>>> Python seriously needs a brand new, rewritten from scratch packaging
>>>> system.
>>>>
>>>
>>> I fully understand your pain and frustration with setuptools, but I'm
>>> hoping you might reconsider. With a few small changes to setup.py, I have
>>> not been able to find an installation method that fails. If you let me know
>>> environments where the installation fails, I'm happy to try to fix those
>>> environments too. I'm trying to get others in my company to use beancount
>>> for our bookkeeping and it's really nice to be able to point people at a
>>> single installation command, as well as being able to use tools like pipsi
>>> to install beancount.
>>>
>>> I tested the following commands under Ubuntu 15.04 and (a) a virtualenv
>>> with python 3.4.3, pip 7.1.0, and setuptools 18.0.1, as well as (b) a
>>> pyvenv with python 3.4.3, pip 1.5.6, setuptools 12.2:
>>>
>>> - pip3 install -e . (this is recommended by the python packaging guide
>>> for development installs rather than using "python3 setup.py install"
>>> directly)
>>> - pip3 install .
>>> - python3 setup.py install (yes, you get an annoying warning about not
>>> running it under pip, but everything works)
>>> - python3 setup.py build_ext -i (copies _parser.so to
>>> src/python/beancount/parser)
>>>
>>> Here's a diff of the changes I had to make. I think the reason you were
>>> having trouble with _parser.so getting copied to the right place is because
>>> the first argument to Extension needs to be a python package path, not a
>>> filesystem path.
>>>
>>>
>>> diff -r b5d8ae469380 setup.py
>>> --- a/setup.py Mon Oct 05 11:31:52 2015 +0800
>>> +++ b/setup.py Wed Oct 07 15:36:42 2015 -0700
>>> @@ -18,7 +18,7 @@
>>>
>>>  # Import setup().
>>>  setup_extra_kwargs = {}
>>> -from distutils.core import setup, Extension
>>> +from setuptools import setup, Extension
>>>
>>>  # Unused support for setuptools. Setuptools is seriously broken:
>>>  #
>>> @@ -132,7 +132,7 @@
>>>      scripts=install_scripts,
>>>
>>>      ext_modules=[
>>> -        Extension("beancount/parser/_parser",
>>> +        Extension("beancount.parser._parser",
>>>                    sources=[
>>>                        "src/python/beancount/parser/lexer.c",
>>>                        "src/python/beancount/parser/grammar.c",
>>> @@ -142,6 +142,13 @@
>>>
>>>  '"{}"'.format(hash_parser_source_files()))]),
>>>      ],
>>>
>>> +    install_requires=[
>>> +        'python-dateutil',
>>> +        'bottle',
>>> +        'ply',
>>> +        'lxml',
>>> +    ],
>>> +
>>>      # Add optional arguments that only work with some variants of
>>> setup().
>>>      **setup_extra_kwargs
>>>  )
>>>
>>>
>>> Thanks,
>>> Gary
>>>
>>> --
> You received this message because you are subscribed to the Google Groups
> "Beancount" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/beancount/692f65af-a1ef-453b-94c8-20885965f223%40googlegroups.com
> <https://groups.google.com/d/msgid/beancount/692f65af-a1ef-453b-94c8-20885965f223%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"Ledger" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to