How to install Python package from source on Windows

bartc bc at freeuk.com
Wed May 17 11:37:05 EDT 2017


On 17/05/2017 15:13, Chris Angelico wrote:
> On Wed, May 17, 2017 at 11:53 PM, bartc <bc at freeuk.com> wrote:

>> That's all true. But the answer is not to make it a nightmare for everyone
>> else as well as yourself. If the requirement is to get other people to build
>> your product from source for the purpose of using it or testing it (and for
>> various reasons using prebuilt binaries is not an option), then the process
>> ought to be as painless as possible.
>
> What, you mean like this?
>
> ./configure
> make
> sudo make install

No, not like that. I mean genuinely simple. Your example:

(1) Doesn't work on Windows
(2) Usually seems to involve executing 20,000 to to 30,000 lines of 
complete gobbledygook in that configuration script.

That can't possibly be justified.

One project I tried to compile comprised only a dozen modules, but still 
required nearly 1000 lines of incantations in the combined configure and 
makefile scripts to build it (which didn't work as it waS Windows).

> I think the bulk of open source software can be built using those steps.

Maybe, if within Unix or Linux.

What would happen if you were presented with a machine, of some unknown 
OS except that it's not Linux, and only had an editor, a bare compiler 
and linker to work with? Would you be completely helpless?

Suppose then the task was to run some Python, but you only had the bare 
sources: .c and .h files, and whatever .py files come as standard; where 
would you start? Would that 18,000-line configure script come in handy, 
or would it be no use at all without your usual support systems?

And you're accusing /me/ of being in a bubble!

>> Compare ease of compiling with building other C compilers from source. (And
>> actually, this can compile itself, some 17Kloc, in a few tens of
>> milliseconds.)

> In other words, it's only targeting one single CPU architecture and OS
> API.

And? My gcc installation only generates code for x86, x64. So does my 
Pelles C**. So does my lccwin**. So does my DMC (only x86). So does my 
Tiny C**. So does my MSVC2008 (x86 only). All also only generate code 
for Windows.

(** Those use separate installations to achieve those two targets. 
lccwin is one installation but uses different sets of files.)

If I wanted to build gcc for example from sources, then I need to 
download and grapple with a package containing 100,000 files, including 
tens of thousands of source files, even if I'm only interested in one 
target. /That/ is supposed to be better?

Anyway adding another target is no big deal. (I've targeted pdp10, z80, 
8086, 80386[x86] on previous compilers, sometimes as asm, sometimes as 
binary. Also C source code. I written assemblers for z80, 8051, 8086, 
80186, 80386[partial] all generating binary.)

The Win64 ABI thing is a detail. Win64 API uses 4 registers to pass 
parameters, and requires a shadow stack space; Linux uses 6 registers 
and no shadow space, and handles XMM a bit differently. I think that's it...

> Also, it emits nasm code, so if you actually want a binary, you
> can't consider this complete; the size of nasm + linker needs to be
> included.

If I download Clang for Windows, then it doesn't emit anything at all! 
In fact it can't compile anything. Because it relies on other compilers 
(gcc or MSVC, but it has to be the right one) to supply header files, 
linkers, everything it needs.

Clang is a 64MB executable.

But yes, Nasm is a poor match for my compiler, and unsatisfactory. The 
next step is to eliminate that and the need for a linker. Then this 
'mcc' project can run applications from source just like Python.

It's funny though that when /I/ stipulate third party dependencies 
[small, self-contained ones like nasm or golink], then it's bad; when 
other people do it [massive great ones like vs2015 or git] then that's good!

And I can only conclude from your comments, that CPython is also 
incomplete because it won't work without a bunch of other tools, all 
chosen to be the biggest and most elaborate there are.

  Yeah, it's not hard for a small program to produce valid
> code for one target system. How good is the resultant code? Can you
> outperform other popular compilers?

For running my language projects, it might be 30% slower than gcc-O3, 
about on a par with compilers such as DMC, lccwin, and PellesC, and 
generally faster than Tiny C. [Here I'm mixing up results from my C 
compiler and my non-C compiler; I've can't be bothered to do any 
exhaustive testing because you'll simply find another way of belittling 
my efforts.]

>> Look at the link for sqlite amalgamation I posted earlier today. On that
>> site, it says they extensively use TCL to generate some of the sources. To
>> build sqlite conventionally, would require someone to install a TCL system.
>> Their amalgamated version thankfully doesn't require that.
>>
>
> Oh, you mean like how tkinter embeds tcl? You can't possibly do that
> in a production language, can you.

No, I mean having to install some language system that is of no 
relevance whatsoever to a developer, other than being a stipulation of 
some third party add-on.

If you were paying someone by the hour to add sqlite to a project, would 
you rather they just used the amalgamated file, or would you prefer they 
spent all afternoon ******* about with TCL trying to get it to generate 
those sources?

-- 
bartc



More information about the Python-list mailing list