[Distutils] a package with is a module

Ethan Furman ethan at stoneleaf.us
Mon Oct 27 16:07:43 CET 2014


On 10/27/2014 07:04 AM, Paul Moore wrote:
> On 27 October 2014 13:47, Ethan Furman <ethan at stoneleaf.us> wrote:
>> So I have multiple problems:
>>
>>    - how do I tell PyPI that this file is for Python2.4 - 2.6, this other
>> file is for 2.7, and this other other file is for 3.3+ ?
>>
>>    - if I have to stick it all in one archive, how do I tell setup.py which
>> to install?
>>
>>    - is it possible to have all three source files as, say, .txt files, and
>> then have some Python code before the setup() call which renames the correct
>> one to dbf.py?  How do I know where the .txt files are at to rename them?
>
> For a source distribution, you could play clever games in setup.py to
> put the right file in place, with the right name. But that's messy and
> it means that if you distribute wheels (not that there's much point in
> doing so) you need separate wheels for 2.6-, 2.7 and 3.3+.

But how?  When setup.py runs, is it guaranteed to do so in a particular location relative to the installable files?

And I wouldn't mind making separate wheels, if I ever get that far.


> Alternatively, you could distribute all 3 files, as
>
> dbf
> \
>    - __init__.py
>    - dbf_26.py
>    - dbf_27.py
>    - dbf_3.py
>
> Then in __init__.py do
>
> if sys.version_info[0] == 3:
>    from .dbf_3 import *
> elif sys.version_info[:2] == (2, 7):
>    from .dbf_27 import *
> else
>    from .dbf_26 import *

The problem I have with this method is that the last time I tried it setup.py attempted to pre-compile all the files, 
resulting in syntax errors, which makes for a lousy user experience.

--
~Ethan~


More information about the Distutils-SIG mailing list