SIP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ C / C ++ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдирд╛ред рднрд╛рдЧ 1

рдХрднреА-рдХрднреА, рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдкрд╛рдпрдерди рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реА рдпрд╛ рд╕реА ++ рдореЗрдВред рдЗрд╕рдХреЗ рдХрд╛рд░рдг рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд╛рдпрдерди рдПрдХ рдЕрджреНрднреБрдд рднрд╛рд╖рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдкрд╛рдпрдерди рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╕реА рдФрд░ рд╕реА ++ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ), рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ, рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ (рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ) рдмрдирд╛рдПрдВ рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп Python рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рджреВрд╕рд░реЗ, рдПрдХ рд╕реНрдерд┐рддрд┐ рдЕрдХреНрд╕рд░ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд╛рдпрдерди рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕реА рд╕реА рдпрд╛ рд╕реА ++ рдореЗрдВредрдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдКрдкрд░ рдПрдХ рдкрд╛рдпрдерди рдХреЛ рдмрд╛рдВрдз рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗ рдмрд┐рдирд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореВрд▓ рд░реВрдк рд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦреА рдЧрдИ рдереАред

рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдХрд░рдг рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рд▓реЛрдЧ рдЬреИрд╕реЗ рдкрд╛рдпрдерди / рд╕реА рдПрдкреАрдЖрдИ рд╕реЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд╛рд▓реЗ рдЬреИрд╕реЗ SWIG рдФрд░ SIP рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ред

рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рдЙрдкрдХрд░рдг, рдПрд╕рдЖрдИрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ ред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, SIP рдХреЛ Qt рд▓рд╛рдЗрдмреНрд░реЗрд░реА - PyQt рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдмрдВрдзрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдмрдбрд╝реЗ рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, wxPython ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, gcc рдХреЛ C рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ g ++ рдХреЛ C ++ рд╕рдВрдХрд▓рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрд░реНрдХ рд▓рд┐рдирдХреНрд╕ рдФрд░ рдкрд╛рдпрдерди 3.8 рдХреЗ рддрд╣рдд рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рдХрд╛ рд╡рд┐рд╖рдп рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЬреАрдердм рдкрд░ рднрдВрдбрд╛рд░ рд╕реЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
рдПрд╕рдЖрдИрдкреА рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░ https://www.riverbankcomputing.com/hg/sip/ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ ред рдорд░реНрдХреНрдпреВрд░рд┐рдпрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ SIP рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реА рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдПрдХ рдмрдВрдзрди рдмрдирд╛рдирд╛


рд╕реА рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЗрдЦрди


рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╕реНрд░реЛрдд рдореЗрдВ pyfoo_c_01 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдорд╛рдиреЗрдВрдЧреЗ рдХрд┐ рд╣рдо рд╕рдм рдХреБрдЫ рдЦрд░реЛрдВрдЪ рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдлрд┐рд░ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЪрд▓рд╛рдПрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╣реА рдХрд╛рд░реНрдп рдХрд░рдиреЗ рджреЗрдВ

int foo(char*);

рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрдЧрд╛ рдФрд░ рдЕрдкрдиреА рд▓рдВрдмрд╛рдИ рдХреЛ 2. рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдЧрд╛ред

рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ foo.h рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ:

#ifndef FOO_LIB
#define FOO_LIB

int foo(char* str);

#endif

рдФрд░ рдлрд╝рд╛рдЗрд▓ foo.cpp рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде :

#include <string.h>

#include "foo.h"

int foo(char* str) {
	return strlen(str) * 2;
}

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд░рд▓ main.c рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВрдЧреЗ :

#include <stdio.h>

#include "foo.h"

int main(int argc, char* argv[]) {
	char* str = "0123456789";
	printf("%d\n", foo(str));
}

рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП, рдореЗрдХрдлрд╛рдЗрд▓ рдмрдирд╛рдПрдВ :

CC=gcc
CFLAGS=-c
DIR_OUT=bin

all: main

main: main.o libfoo.a
	$(CC) $(DIR_OUT)/main.o -L$(DIR_OUT) -lfoo -o $(DIR_OUT)/main

main.o: makedir main.c
	$(CC) $(CFLAGS) main.c -o $(DIR_OUT)/main.o

libfoo.a: makedir foo.c
	$(CC) $(CFLAGS) foo.c -o $(DIR_OUT)/foo.o
	ar rcs $(DIR_OUT)/libfoo.a $(DIR_OUT)/foo.o

makedir:
	mkdir -p $(DIR_OUT)

clean:
	rm -rf $(DIR_OUT)/*

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлреВ рдХреЗ рд╕рднреА рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ foo рдХреЗ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рдХрд░реЗрдВ :

foo_c_01 /
тФФтФАтФА рдлреВ
    .C foo.c
    H foo.h
    тФЬтФАтФА рдореБрдЦреНрдп рд╕реА.рд╕реА.
    Ile рдореЗрдХрдлрд╛рдЗрд▓


рд╣рдо foo рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

make

рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди, рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

mkdir -p bin
gcc -c main.c -o bin/main.o
gcc -c foo.c -o bin/foo.o
ar rcs bin/libfoo.a bin/foo.o
gcc bin/main.o -Lbin -lfoo -o bin/main

рд╕рдВрдХрд▓рди рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ foo рдлрд╝реЛрд▓реНрдбрд░ :

foo_c_01 /
тФФтФАтФА рдлреВ
    тФЬтФАтФА рдмрд┐рди
    Oo oo foo.o
    F тФВ libfoo.a
    тФЬтФАтФА тФЬтФАтФА рдореБ рдп
    редред Main.o
    .C foo.c
    H foo.h
    тФЬтФАтФА рдореБрдЦреНрдп рд╕реА.рд╕реА.
    Ile рдореЗрдХрдлрд╛рдЗрд▓


рд╣рдордиреЗ рд╕реНрдереИрддрд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдЗрд╕реЗ рдореБрдЦреНрдп рдирд╛рдо рдХреЗ рддрд╣рдд рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рдЖрдЗрдП рдкреНрдпреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдКрдкрд░ рдПрдХ рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рддреЗ рд╣реИрдВред

рдПрд╕рдЖрдИрдкреА рдореВрд▓ рдмрд╛рддреЗрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ SIP рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдорд╛рдирдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде:

pip install --user sip

рдмреЗрд╢рдХ, рдпрджрд┐ рдЖрдк рдПрдХ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ --user рдкреИрд░рд╛рдореАрдЯрд░, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ SIP рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреНрдпрд╛ рдЬрд╝рд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рдкрд╛рдпрдерди рдХреЛрдб рд╕реЗ рдлреВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ? рдХрдо рд╕реЗ рдХрдо, рдЖрдкрдХреЛ рджреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ TOML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ pyproject.toml рдирд╛рдо рджреЗрдВ , рдФрд░ рджреВрд╕рд░рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди .sip рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИред рдЪрд▓реЛ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рд╛рде рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред

рд╣рдореЗрдВ рд╕реНрд░реЛрдд рдХреА рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд╕рд╣рдордд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Pyfoo_c рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ foo рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рд╣реИред рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рдж , рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рдлреВ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╕рдВрдХрд▓рд┐рдд рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреАред рдмрд╛рдж рдореЗрдВ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╣реЗрдбрд░ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред

рдПрд╕рдЖрдИрдкреА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдЙрд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреА рдЬреЛ рдлреВ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддреА рд╣реИрдВ ред

pyproject.toml


Pyproject.toml рдлрд╝рд╛рдЗрд▓ SIP рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди PEP 517 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдкрд╛рдпрдерди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рд░реВрдк "рд╕реНрд░реЛрдд рдкреЗрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрдорд╛рдг-рдкреНрд░рдгрд╛рд▓реА рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рд╛рд░реВрдк" рдФрд░ PEP 518 рдореЗрдВ "рдкрд╛рдпрдерди рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛" рд╣реИ ред рдпрд╣ рдПрдХ TOML рдлрд╝рд╛рдЗрд▓ рд╣реИ , рдЬрд┐рд╕реЗ ini рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╕рдВрд╕реНрдХрд░рдг рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ "рдХреА = рд╡реИрд▓реНрдпреВ" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рди рдХреЗрд╡рд▓ [foo] рдЬреИрд╕реЗ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ TOML рд╢рдмреНрджреЛрдВ рдореЗрдВ рдЯреЗрдмрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдФрд░ рдкреНрд░рдкрддреНрд░ рдХреЗ рдЙрдкрдЦрдВрдбреЛрдВ рдореЗрдВ [foo.bar.spam]ред рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рди рдХреЗрд╡рд▓ рддрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕реВрдЪреА, рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдмреВрд▓рд┐рдпрди рдорд╛рди рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЙрди рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдПрд╕рдЖрдИрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рджреЗрдЦреЗрдВрдЧреЗ, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧреА, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдЫреЛрдЯреА рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдХреНрд░рдо рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред PIProject.toml

рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг, рдЬреЛ SIP рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ , Sip рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, foo рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╕рдорд╛рди рд╕реНрддрд░ рдкрд░ pyproject.toml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ :

foo_c_01 /
тФЬтФАтФА рдлреВ
тФЬтФАтФА тФЬтФАтФА рдмрд┐рди
тФЬтФАтФА тФЬтФАтФА тФВ foo.o
тФЬтФАтФА тФЬтФАтФА тФВ libfoo.a
тФЬтФАтФА тФЬтФАтФА тФЬтФАтФА рдореБрдЦреНрдп
тФФтФАтФА тФФтФАтФА тФВ main.o
Oo oo foo.c
Oo oo foo.h
.C тФЬтФАтФА main.c
F f рдореЗрдХрдлрд╛рдЗрд▓
Ject pyproject.toml


Pyproject.toml рдХреА рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА:

[build-system]
requires = ["sip >=5, <6"]
build-backend = "sipbuild.api"

[tool.sip.metadata]
name = "pyfoo"
version = "0.1"
license = "MIT"

[tool.sip.bindings.pyfoo]
headers = ["foo.h"]
libraries = ["foo"]
include-dirs = ["foo"]
library-dirs = ["foo/bin"]

[рдмрд┐рд▓реНрдб-рд╕рд┐рд╕реНрдЯрдо] рдЕрдиреБрднрд╛рдЧ (TOML рд╢рдмреНрджреЛрдВ рдореЗрдВ "рддрд╛рд▓рд┐рдХрд╛") рдорд╛рдирдХ рд╣реИ рдФрд░ рдкреАрдИрдкреА 518 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ ред рдЗрд╕рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:


рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди [tool.sipред *] рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред [Tool.sip.metadata]

рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ: рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рдЕрд╕реЗрдВрдмрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдХреЛ pyfoo рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ , рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЗрд╕ рдирд╛рдо рдХреЛ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рдкрд╛рдпрдерди рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВрдЧреЗ), рдкреИрдХреЗрдЬ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ "0.1") рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, " рдПрдордЖрдИрдЯреА ")ред рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг [рдЯреВрд▓.рд╕рд┐рдк.рдмрд┐рдВрдбрд┐рдВрдЧреНрд╕] рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред pyfoo ]ред рдЕрдиреБрднрд╛рдЧ рд╣реЗрдбрд░ рдореЗрдВ рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рдиреЛрдЯ рдХрд░реЗрдВред рд╣рдордиреЗ рдЗрд╕ рдЦрдВрдб рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗ рд╣реИрдВ:





  • рд╣реЗрдбрд░ - рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЬреЛ рдлреВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
  • рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ - рд╕реНрдЯреИрдЯрд┐рдХ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреАред
  • рд╢рд╛рдорд┐рд▓- dirs рд╡рд╣ рдорд╛рд░реНрдЧ рд╣реИ рдЬрд╣рд╛рдБ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддрд▓рд╛рд╢ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬреЛ C рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд╣рд╛рдБ foo.h рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдирд╛ рд╣реИ ред
  • рд▓рд╛рдЗрдмреНрд░реЗрд░реА-рдбрд╛рдпрд░ рд╡рд╣ рдкрде рд╣реИ рдЬрд╣рд╛рдБ C рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реЗ рдЬреБрдбрд╝реА рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╡рд╣ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓ foo рдмрдирд╛рдИ рдЧрдИ рд╣реИ ред

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдПрд╕рдЖрдИрдкреА рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рдИред рдЕрдм рд╣рдо рдЕрдЧрд▓реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ред

pyfoo.sip


Pyproject.toml рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ pyfoo.sip рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ :

foo_c_01 /
тФЬтФАтФА рдлреВ
тФЬтФАтФА тФЬтФАтФА рдмрд┐рди
тФЬтФАтФА тФЬтФАтФА тФВ foo.o
тФЬтФАтФА тФЬтФАтФА тФВ libfoo.a
тФЬтФАтФА тФЬтФАтФА тФЬтФАтФА рдореБрдЦреНрдп
тФФтФАтФА тФФтФАтФА тФВ main.o
Oo oo foo.c
Oo oo foo.h
.C тФЬтФАтФА main.c
F f рдореЗрдХрдлрд╛рдЗрд▓
Oo pyfoo.sip
Ject pyproject.toml


рдПрдХреНрд╕рдЯреЗрдВрд╢рди .sip рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реНрд░реЛрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рд░реВрдк рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдм рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде C / C ++ рд╣реИрдбрд░ рдлрд╝рд╛рдЗрд▓ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ SIP рдХреЛ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ pyfoo.sip рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП , рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, pyproject.toml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ , рд╣рдордиреЗ [tool.sip.bindings] рдмрдирд╛рдпрд╛ рдерд╛ред pyfoo]ред рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдРрд╕реЗ рдХрдИ рд╡рд┐рднрд╛рдЬрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдХрдИ * .Sip рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдПрд╕рдЖрдИрдкреА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрд╕рдЖрдИрдкреА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, .sip рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо (рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдирд╛рдо) рдЙрд╕ рдкреИрдХреЗрдЬ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ , рдЬреЛ [tool.sip.metadata] рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ ред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ pyfoo.sip рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ :



%Module(name=foo, language="C")

int foo(char*);

рд▓рд╛рдЗрдиреЗрдВ рдЬреЛ рдЪрд░рд┐рддреНрд░ "%" рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджреЗрд╢ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдПрд╕рдЖрдИрдкреА рдХреЛ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреИрд╕реЗ рдареАрдХ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдФрд░ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда рдкрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рджреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗред Pyfoo.sip

рдлрд╝рд╛рдЗрд▓ % рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрджреЗрд╢ (рдирд╛рдо = рдлреВ, рднрд╛рд╖рд╛ = "рд╕реА") рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ рдмрд┐рдирд╛ рдЙрджреНрдзрд░рдг рдХреЗ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ ( рдирд╛рдо ) рдФрд░ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ ( рднрд╛рд╖рд╛ ) рдХреЗ рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ) рдЙрджреНрдзрд░рдг рдХреЗ рд╕рд╛рде, рд╕реА / рд╕реА ++ рдореЗрдВ рддрд╛рд░ рдХреА рддрд░рд╣ред рдпрд╣ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ % рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ ред % рдореЙрдбреНрдпреВрд▓

рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ, рдХреЗрд╡рд▓ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ , рдЬреЛ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЙрдбреНрдпреВрд▓ рдХреЛ рдлреВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЗрд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдлреВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ , рдЗрд╕рд▓рд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдпрд╛рдд рдХрд░реЗрдВрдЧреЗ:

from foo import foo

рд╣рдо рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдиреЗрд╕реНрдЯреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд╕рд╛рде:

%Module(name=foo.bar, language="C")
...

рдлрд┐рд░ рдлрдВрдХреНрд╢рди рдлреВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА:

from foo.bar import foo

% рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рднрд╛рд╖рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрд╕ рднрд╛рд╖рд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрд░реЛрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди "C" рдпрд╛ "C ++" рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрд╕рдЖрдИрдкреА рдпрд╣ рдорд╛рди рд▓реЗрдЧрд╛ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА C ++ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИред рдЕрдм pyfoo.sip рдлрд╝рд╛рдЗрд▓ рдХреА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рджреЗрдЦреЗрдВ :



int foo(char*);

рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдШреЛрд╖рдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рд╛рдЗрдк рдПрдХ рдкрд╛рдпрдерди рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдо рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ


рдЕрдм рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Pyfoo_c_01 / foo / folder рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдореЗрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд┐рд▓реНрдб рд╢реБрд░реВ рдХрд░реЗрдВ :

$ make

mkdir -p bin
gcc -c main.c -o bin/main.o
gcc -c foo.c -o bin/foo.o
ar rcs bin/libfoo.a bin/foo.o
gcc bin/main.o -Lbin -lfoo -o bin/main

рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛, рддреЛ рдмрд┐рди рдлрд╝реЛрд▓реНрдбрд░ рдлреВ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ , рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ, libfoo.a рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдореБрдЦреНрдп рд╡рд┐рд╖рдп рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ gcc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред Pyfoo_c_01 рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ ред рдЕрдм рдПрд╕рдЖрдИрдкреА рдЯреАрдореЛрдВ рдХреЛ рдЬрд╛рдирдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдПрд╕рдЖрдИрдкреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рдореНрди рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрдорд╛рдВрдб рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ ( рдкреНрд░рд▓реЗрдЦрди рдкреГрд╖реНрда ):



  • рд╕рд┐рдк-рдирд┐рд░реНрдорд╛рдг ред рдПрдХ рдкрд╛рдпрдерди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИред
  • рдШреВрдВрдЯ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд ред рдПрдХ рдкрд╛рдпрдерди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
  • sip-sdist. .tar.gz, pip.
  • sip-wheel. wheel ( .whl).
  • sip-module. , , SIP. , , . , standalone project, , , , .
  • sip-distinfo. .dist-info, wheel.

рдЗрди рдЖрджреЗрд╢реЛрдВ рдХреЛ рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ pyproject.toml рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд┐рдд рд╣реИ ред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрд╕рдЖрдИрдкреА рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд┐рдк-рдмрд┐рд▓реНрдб рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ , рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП -verbose рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде , рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

$ sip-build --verbose

рдпреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ: pyfoo
Pyfoo рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдирд╛ ...
'рдлреВ' рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдВрдХрд▓рди ...
рдирд┐рд░реНрдорд╛рдг 'рдлреВ' рдПрдХреНрд╕рдЯреЗрдВрд╢рди
рдмрд┐рд▓реНрдб
рдмрдирд╛рдирд╛ / temp.linux-x86_64-3.8
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fno-semantic-interposition -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fPIC -DS_PROTECTED_IS_PUBLIC -Dprotected = public -Iред -I ../../ foo -I / usr / рд╢рд╛рдорд┐рд▓ / python3.8 -c sipfoocmodule.c -o build / temp.linux-x86_64-3.8 / sipfoocmodule.o
sipfoocmodule.c: func_foo рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ:
sipfoocmodule.c .c: 29: 22: рдЪреЗрддрд╛рд╡рдиреА: рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ "рдлреВ" [-рд╡рд┐рд╢рд┐рд╖реНрдЯ-рдлрд╝рдВрдХреНрд╢рди-рдШреЛрд╖рдгрд╛]
29 | sipRes = foo (a0);
| ^ ~~
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fno-semantic-interposition -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fPIC -DS_PROTECTED_IS_PUBLIC -Dprotected = public -Iред -I ../../ foo -I / usr / / python3.8 -c array.c -o build / temp.linux-x86_64-3.8 / array.o
gcc -pthread -Wno-unused-result -Wsign -compare -DNDEBUG -g -fwrapv -O3 -Wall -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fno-semantic-interpose -march = x86-64 -mtune = рдЬреЗрдиреЗрд░рд┐рдХ -O3 -fno-plt -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fPIC -DSIP_PROTECTED_IS_PUBLIC -Dprott = public -Iред -I ../../ рдлреВ -I / usr / рдореЗрдВ рд╢рд╛рдорд┐рд▓ / python3.8 -c bool.cpp -o build / temp.linux-x86_64-3.8 / bool.o
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fno-semantic-interposition -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fPIC -DS_PROTECTED_IS_PUBLIC -Dprotected = public -Iред -I ../../ foo -I / usr / / / python3.8 -c objmap.c-build / temp.linux-x86_64-3.8 / objmap.o
gcc -pthread -Wno-unused-result -Wsign рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ -compare -DNDEBUG -g -fwrapv -O3 -Wall -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fno-semantic-interpose -march = x86-64 -mtune = рдЬреЗрдиреЗрд░рд┐рдХ -O3 -fno-plt -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fPIC -DSIP_PROTECTED_IS_PUBLIC -Dprott = public -Iред -I ../../ foo -I / usr / рд╢рд╛рдорд┐рд▓ / python3.8 -c qtlib.c -o build / temp.linux-x86_64-3.8 / qtlib.o
gcc -pthread -Wno- рдЕрдкреНрд░рдпреБрдХреНрдд рдкрд░рд┐рдгрд╛рдо x86-64 -mtune = generic -O3 -pipe -fno-plt -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fPIC -DS_PROTECTED_IS_PUBLIC -Dprotected = public -Iред -I ../../ foo -I / usr / / / python3.8 -c int_convertors.c -o build / temp.linux-x86_64-3.8 / int_convertors.o
gcc -pthread -Wno-unused-result -Wsign -compare -DNDEBUG -g -fwrapv -O3 -Wall -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fno-semantic-interpose -march = x86-64 -mtune = рдЬреЗрдиреЗрд░рд┐рдХ -O3 -fno-plt -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fPIC -DSIP_PROTECTED_IS_PUBLIC -Dprott = public -Iред -I ../../ рдлреВ -I / usr / рд╢рд╛рдорд┐рд▓ / python3.8 -c voidptr.c -o build / temp.linux-x86_64-3.8 / voidptr.o
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fno-semantic-interposition -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fPIC -DS_PROTECTED_IS_PUBLIC -Dprotected = public -Iред -I ../../ foo -I / usr / / / python3.8 -c apiversions.c -o build / temp.linux-x86_64-3.8 / apiversions.o
gcc -pthread -Wno-unused-result -Wsign рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ -compare -DNDEBUG -g -fwrapv -O3 -Wall -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fno-semantic-interpose -march = x86-64 -mtune = рдЬреЗрдиреЗрд░рд┐рдХ -O3 -fno-plt -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fPIC -DSIP_PROTECTED_IS_PUBLIC -Dprott = public -Iред -I ../../ foo -I / usr / / / python3.8 -c рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░.c.o рдмрд┐рд▓реНрдб / temp.linux-x86_64-3.8 / рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ред
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fno-semantic-interposition -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fPIC -DS_PROTECTED_IS_PUBLIC -Dprotected = public -Iред -I ../../ foo -I / usr / / / python3.8 -c threads.c -o build / temp.linux-x86_64-3.8 / threads.o
gcc -pthread -Wno-unused-result -Wsign -compare -DNDEBUG -g -fwrapv -O3 -Wall -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fno-semantic-interpose -march = x86-64 -mtune = рдЬреЗрдиреЗрд░рд┐рдХ -O3 -fno-plt -march = x86-64 -mtune = generic -O3 -pipe -fno-plt -fPIC -DSIP_PROTECTED_IS_PUBLIC -Dprott = public -Iред -I ../../ foo -I / usr / / рд╢рд╛рдорд┐рд▓ / python3.8 -c siplib.c -o build / temp.linux-x86_64-3.8 / siplib.o
siplib.c: "рд╕реНрд▓реЙрдЯ_richcompare" рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ:
siplib.c: 9536: 16: рдЪреЗрддрд╛рд╡рдиреА: "st" рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ [-Wmaybe-uninitialized]
9536 | рд╕реНрд▓реЙрдЯ = findSlotInClass (ctd, st);
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
siplib.c: 10671: 19: рдиреЛрдЯ: "рд╕реЗрдВрдЯ" рдпрд╣рд╛рдБ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
10671 | sipPySlotType st;
| ^ ~
siplib.c: рдлрд╝рдВрдХреНрд╢рди "parsePass2" рдореЗрдВ:
siplib.c: 5625: 32: рдЪреЗрддрд╛рд╡рдиреА: "рд╕реНрд╡рд╛рдореА" рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ [-Wmaybe-uninitialized]
5625 | * рдорд╛рд▓рд┐рдХ = arg;
| ~~~~~~~ ^ ~
g ++ -pthread -sared -Wl, -O1, - Sort-common, - as-need, -z, relro, -z, now -fno-semantic-interposition -Wl, -O1, - рд╕реЙрд░реНрдЯ-рдХреЙрдорди, --as-need, -z, relro, -z, рдЕрдм build / temp.linux-x86_64-3.8 / sipfoocmodule.o build / temp.linux-x86_64-3.8 / array.o build / temp.linux-x86_64-3.8.8 рдмрдирд╛рдПрдБред /bool.o build / temp.linux-x86_64-3.8 / objmap.o build / temp.linux-x86_64-3.8 / qtlib.o build / temp.linux-x86_64-3.8 / int_convertors.o build / temp.linux-x86_64 -3.8 / voidptr.o build / temp.linux-x86_64-3.8 / apiversions.o build / temp.linux-x86_64-3.8 / descriptors.o build / temp.linux-x86_64-3.8 / threads.o build / temp.linux -x86_64-3.8 / siplib.o -L ../../ foo / bin -L / usr / lib -lfoo -o / home / jenyay / Projects / рд╕реЙрдлреНрдЯ / рд╕рд┐рдк-рдЙрджрд╛рд╣рд░рдг / pyfoo -c_01 / build / foo / рдлреВред cpython-38-x86_64-linux-gnu.so
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╣рдо рдПрд╕рдЖрдИрдкреА рдХреЗ рдХрд╛рдо рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕реНрд░реЛрдд рд╕рдВрдХрд▓рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпреЗ рд╕реНрд░реЛрдд рдЗрд╕ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдмрд┐рд▓реНрдб / foo / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ :

pyfoo_c_01
тФЬтФАтФА рдирд┐рд░реНрдорд╛рдг
Oo oo рдлреВ
тФВ тФВ apiversions.c
.C тФЬтФАтФА array.c
ред тФЬтФАтФА array.h
Ool тФВ bool.cpp
тФЬтФАтФА тФЬтФАтФА рдирд┐рд░реНрдорд╛рдг
тФФтФАтФА x тФВ temp.linux-x86_64-3.8
тФЬтФАтФА тФЬтФАтФА тФВ apiversions.o
тФЬтФАтФА тФЬтФАтФА тФВ array.o
тФЬтФАтФА тФЬтФАтФА тФВ bool.o
тФЬтФАтФА тФВ тФВ рд╡рд░реНрдгрдирдХрд░реНрддрд╛
тФЬтФАтФА o тФВ int_convertors.o
тФЬтФАтФА тФЬтФАтФА тФВ objmap.o
тФЬтФАтФАред тФВ qtlib.o
тФЬтФАтФА ule тФВ sipfoocmodule.o
тФЬтФАтФА тФЬтФАтФА тФВ siplib.o
тФЬтФАтФА тФЬтФАтФА тФВ рдзрд╛рдЧреЗ.o
тФФтФАтФАред тФВ voidptr.o
Pt pt рд╡рд┐рд╡рд░рдгрдХрд░реНрддрд╛
Oo-foo.cpython-38-x86_64-linux-gnu.so
_ _ Int_convertors.c
J j objmap.c
T t qtlib.c
Ipред SipAPIfoo.h
Ipред Sipfoocmodule.c
Ip ip sip.h
Ip ip рд╕рд┐рдкрдВрдЯ.рд╣
Ipl тФВ siplib.c
Reads тФЬтФАтФА рд╕реВрддреНрд░
Oid oid voidptr.c
тФЬтФАтФА рдлреВ
тФЬтФАтФА тФЬтФАтФА рдмрд┐рди
тФЬтФАтФА тФЬтФАтФА тФВ foo.o
тФЬтФАтФА тФЬтФАтФА тФВ libfoo.a
тФЬтФАтФА тФЬтФАтФА тФЬтФАтФА рдореБрдЦреНрдп
тФФтФАтФА тФФтФАтФА тФВ main.o
Oo oo foo.c
Oo oo foo.h
.C тФЬтФАтФА main.c
F f рдореЗрдХрдлрд╛рдЗрд▓
Oo pyfoo.sip
Ject pyproject.toml


рд╕рд╣рд╛рдпрдХ рд╕реНрд░реЛрдд рдмрд┐рд▓реНрдб / foo рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░, рдЪрд▓реЛ sipfoocmodule.c рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦреЗрдВ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реАрдзреЗ foo рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬрд┐рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:

/*
 * Module code.
 *
 * Generated by SIP 5.1.1
 */

#include "sipAPIfoo.h"

/* Define the strings used by this module. */
const char sipStrings_foo[] = {
    'f', 'o', 'o', 0,
};

PyDoc_STRVAR(doc_foo, "foo(str) -> int");

static PyObject *func_foo(PyObject *sipSelf,PyObject *sipArgs)
{
    PyObject *sipParseErr = SIP_NULLPTR;

    {
        char* a0;

        if (sipParseArgs(&sipParseErr, sipArgs, "s", &a0))
        {
            int sipRes;

            sipRes = foo(a0);

            return PyLong_FromLong(sipRes);
        }
    }

    /* Raise an exception if the arguments couldn't be parsed. */
    sipNoFunction(sipParseErr, sipName_foo, doc_foo);

    return SIP_NULLPTR;
}

/* This defines this module. */
sipExportedModuleDef sipModuleAPI_foo = {
    0,
    SIP_ABI_MINOR_VERSION,
    sipNameNr_foo,
    0,
    sipStrings_foo,
    SIP_NULLPTR,
    SIP_NULLPTR,
    0,
    SIP_NULLPTR,
    SIP_NULLPTR,
    0,
    SIP_NULLPTR,
    0,
    SIP_NULLPTR,
    SIP_NULLPTR,
    SIP_NULLPTR,
    {SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR,
            SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR},
    SIP_NULLPTR,
    SIP_NULLPTR,
    SIP_NULLPTR,
    SIP_NULLPTR,
    SIP_NULLPTR,
    SIP_NULLPTR,
    SIP_NULLPTR,
    SIP_NULLPTR
};

/* The SIP API and the APIs of any imported modules. */
const sipAPIDef *sipAPI_foo;

/* The Python module initialisation function. */
#if defined(SIP_STATIC_MODULE)
PyObject *PyInit_foo(void)
#else
PyMODINIT_FUNC PyInit_foo(void)
#endif
{
    static PyMethodDef sip_methods[] = {
        {sipName_foo, func_foo, METH_VARARGS, doc_foo},
        {SIP_NULLPTR, SIP_NULLPTR, 0, SIP_NULLPTR}
    };

    static PyModuleDef sip_module_def = {
        PyModuleDef_HEAD_INIT,
        "foo",
        SIP_NULLPTR,
        -1,
        sip_methods,
        SIP_NULLPTR,
        SIP_NULLPTR,
        SIP_NULLPTR,
        SIP_NULLPTR
    };

    PyObject *sipModule, *sipModuleDict;
    /* Initialise the module and get it's dictionary. */
    if ((sipModule = PyModule_Create(&sip_module_def)) == SIP_NULLPTR)
        return SIP_NULLPTR;

    sipModuleDict = PyModule_GetDict(sipModule);

    if ((sipAPI_foo = sip_init_library(sipModuleDict)) == SIP_NULLPTR)
        return SIP_NULLPTR;

    /* Export the module and publish it's API. */
    if (sipExportModule(&sipModuleAPI_foo, SIP_ABI_MAJOR_VERSION, SIP_ABI_MINOR_VERSION, 0) < 0)
    {
        Py_DECREF(sipModule);
        return SIP_NULLPTR;
    }
    /* Initialise the module now all its dependencies have been set up. */
    if (sipInitModule(&sipModuleAPI_foo,sipModuleDict) < 0)
    {
        Py_DECREF(sipModule);
        return SIP_NULLPTR;
    }

    return sipModule;
}

рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╛рдпрдерди / рд╕реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдкрд░рд┐рдЪрд┐рдд рдХрд╛рд░реНрдп рджреЗрдЦреЗрдВрдЧреЗред рд▓рд╛рдЗрди 18 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ func_foo рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдВ ред

рдЗрди рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдлрд╝рд╛рдЗрд▓ рдмрд┐рд▓реНрдб / foo / foo.cpython-38-x86_64-linux-gnu.so рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ , рдФрд░ рдЗрд╕рдореЗрдВ рдкрд╛рдпрдерди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрднреА рднреА рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рддреБрд░рдВрдд рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд┐рдк-рдЗрдВрд╕реНрдЯреЙрд▓ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдмрдирд╛рдП рдЧрдП рдкрд╛рдпрдерди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХрдорд╛рдВрдб рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ --target-dir, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдЙрд╕ рдкрде рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдмреЗрд╣рддрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рддрдм рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, sip-sdist рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:

$ sip-sdist

The sdist has been built.

рдЙрд╕рдХреЗ рдмрд╛рдж, pyfoo-0.1.tar.gz рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА , рдЬрд┐рд╕реЗ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

pip install --user pyfoo-0.1.tar.gz

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдирд┐рдореНрди рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдИ рдЬрд╛рдПрдЧреА рдФрд░ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

Processing ./pyfoo-0.1.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Building wheels for collected packages: pyfoo
  Building wheel for pyfoo (PEP 517) ... done
  Created wheel for pyfoo: filename=pyfoo-0.1-cp38-cp38-manylinux1_x86_64.whl size=337289 sha256=762fc578...
  Stored in directory: /home/jenyay/.cache/pip/wheels/54/dc/d8/cc534fff...
Successfully built pyfoo
Installing collected packages: pyfoo
  Attempting uninstall: pyfoo
    Found existing installation: pyfoo 0.1
    Uninstalling pyfoo-0.1:
      Successfully uninstalled pyfoo-0.1
Successfully installed pyfoo-0.1

рдЖрдЗрдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдкрд╛рдпрдерди рдмрдВрдзрди рдмрдирд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рд╣рдо рдкрд╛рдпрдерди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░, pyfoo рдкреИрдХреЗрдЬ рдореЗрдВ foo рдореЙрдбреНрдпреВрд▓ рд╣реЛрддрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ foo рдлрдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ ред

>>> from foo import foo
>>> foo(b'123456')
12

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рди рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдмрд╛рдЗрдЯреНрд╕ b'123456 'рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ - рд╕реА рдХрд╛ рдПрдХ рд╕реАрдзрд╛ рдПрдирд╛рд▓реЙрдЧ * рд╕реАред рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╣рдо str рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП char * рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ ред рдкрд░рд┐рдгрд╛рдо рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рдлрдВрдХреНрд╢рди рдлреВ рдПрдХ рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд╛рд░ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ * , рдЗрд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдЗрдП рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕реВрдЪреА рдХреЗ рдмрдЬрд╛рдп рдлреВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдорд┐рдд рдкрд╛рдпрдерди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ред



>>> from foo import foo
>>> foo('123456')

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo(str): argument 1 has unexpected type 'str'

рдмрдирд╛рдИ рдЧрдИ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ char * рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдереА , рд╣рдо рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдкрдврд╝рд╛рдпрд╛ рдЬрд╛рдП рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВред

рдмрдзрд╛рдИ рд╣реЛ, рд╣рдордиреЗ рд╕реА рдореЗрдВ рд▓рд┐рдЦреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдкрд╣рд▓реА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреАред

рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╡реНрд╣реАрд▓ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓ рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдкрд╣рд┐рдпрд╛ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ рдкреИрдХреЗрдЬ рдкреНрд░рд╛рд░реВрдк рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╡рд░реНрдгрди PEP 427, "рдж рд╡реНрд╣реАрд▓ рдмрд╛рдЗрдирд░реА рдкреИрдХреЗрдЬ рдлреЙрд░реНрдореЗрдЯ 1.0" рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрд╣реАрд▓ рдкреНрд░рд╛рд░реВрдк рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдПрдХ рдЕрд▓рдЧ рдмрдбрд╝реЗ рд▓реЗрдЦ рдХреЗ рдпреЛрдЧреНрдп рд╡рд┐рд╖рдп рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд┐рдпрд╛ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреИрдХреЗрдЬ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдкрд╣рд┐рдпрд╛ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЬ sdist рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЬ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВpyproject.toml рдХреЛ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

sip-wheel

рдЗрд╕ рдЖрджреЗрд╢ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджрд┐рдЦрд╛рдИ рдЬрд╛рдПрдЧреА рдФрд░ рд╕рдВрдХрд▓рдХ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рд╣реЛ рд╕рдХрддреА рд╣реИ:

$ sip-

Wheel рдпреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ: pyfooред
Pyfoo рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ ...
'рдлреВ' рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдВрдХрд▓рди ...
sipfoocmodule.c: func_foo рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ:
sipfoocmodule.c: 29: 22: 22: рдЪреЗрддрд╛рд╡рдиреА: foo рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд╣рд┐рддрд╛рд░реНрде [-рд╡рд┐рд╢рд┐рд╖реНрдЯ-рдлрд╝рдВрдХреНрд╢рди-рдШреЛрд╖рдгрд╛]
29 | sipRes = foo (a0);
| ^ ~~
siplib.c: "рд╕реНрд▓реЙрдЯ_richcompare" рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ:
siplib.c: 9536: 16: рдЪреЗрддрд╛рд╡рдиреА: "st" рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ [-Wmaybe-uninitialized]
9536 | рд╕реНрд▓реЙрдЯ = findSlotInClass (ctd, st);
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
siplib.c: 10671: 19: рдЯрд┐рдкреНрдкрдгреА: "рд╕реЗрдВрдЯ" рдпрд╣рд╛рдБ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
10671 | sipPySlotType st;
| ^ ~
siplib.c: рдлрд╝рдВрдХреНрд╢рди "parsePass2" рдореЗрдВ:
siplib.c: 5625: 32: рдЪреЗрддрд╛рд╡рдиреА: "рд╕реНрд╡рд╛рдореА" рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ [-Wmaybe-uninitialized]
5625 | * рдорд╛рд▓рд┐рдХ = arg;
| ~~~~~~~ ^ ~ ~
рдкрд╣рд┐рдпрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬрдм рдЕрд╕реЗрдВрдмрд▓реА рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ (рд╣рдорд╛рд░реА рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддреА рд╣реИ), рддреЛ pyfoo-0.1-cp38-cp38-manylinux1_x86_64.whl рдпрд╛ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА ред рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдЖрдкрдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдкрд╛рдпрдерди рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдм рд╣рдо рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

pip install --user --upgrade pyfoo-0.1-cp38-cp38-manylinux1_x86_64.whl

--Upgrad рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдБ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрд╛рдЗрдк рдкрд╣рд▓реЗ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд pyfoo рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрджрд▓ рджреЗред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлреВ рдореЙрдбреНрдпреВрд▓ рдФрд░ рдкрд╛рдЗрдлреВ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд░реВрдкрд╛рдВрддрд░рдг рдирд┐рдпрдореЛрдВ рдХреЛ рдЪрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ *


рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдХрд┐ рдлреВ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрд╛рд░ рдирд╣реАрдВред рдЕрдм рд╣рдо рдЗрд╕ рдХрдореА рдХреЛ рдареАрдХ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдФрд░ рдПрд╕рдЖрдИрдкреА рдЙрдкрдХрд░рдг - рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ред рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ .sip рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдХреЛрдб рддрддреНрд╡реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдлрд╝рдВрдХреНрд╢рдВрд╕, рдХреНрд▓рд╛рд╕реЗрд╕, рдлрд╝рдВрдХреНрд╢рди рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯреНрд╕, рдЕрдкрд╡рд╛рдж, рд╡реИрд░рд┐рдПрдмрд▓, рдЗрддреНрдпрд╛рджрд┐ рдПрдиреЛрдЯреЗрд╢рди рдлрд╝реЙрд░рд╡рд░реНрдб рд╕реНрд▓реИрд╢: / рдПрдиреЛрдЯреЗрд╢рди / рдХреЗ рдмреАрдЪ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ ред

рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдзреНрд╡рдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд░рд╛рдЬреНрдп рд╕реЗрдЯ рдпрд╛ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: / рд░рд┐рд▓реАрдЬрд╝рдЧрд┐рд▓ / , рдпрд╛ рдХреБрдЫ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдХреБрдЫ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: / рдПрдиреНрдХреЛрдбрд┐рдВрдЧ = "UTF-8" /ред рдпрджрд┐ рдХрдИ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрд▓реИрд╢ рдХреЗ рдЕрдВрджрд░ рдХреЙрдорд╛ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: / annotation_1, annotation_2 /ред

рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЬреЛ рдлрд╝реЛрд▓реНрдбрд░ pyfoo_c_02 рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ , рдПрдХ рдлрд╝рд╛рдЗрд▓ pyfoo.sip рдПрдиреЛрдЯреЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдлрдВрдХреНрд╢рди рдлреВ рдЬреЛрдбрд╝реЗрдВ :

%Module(name=foo, language="C")

int foo(char* /Encoding="UTF-8"/);

рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрдиреЛрдЯреЗрд╢рди рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рди рдирд┐рдореНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: ASCII, рд▓реИрдЯрд┐рди -1, UTF-8, рдпрд╛ рдХреЛрдИ рдирд╣реАрдВред рдпрджрд┐ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрдиреЛрдЯреЗрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ , рддреЛ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХрд┐рд╕реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдЕрдзреАрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд╛рдпрдерди рдХреЛрдб рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП , рдЕрд░реНрдерд╛рддреНред рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦрд╛ рдерд╛ред рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ str рдЕрдЬрдЧрд░ рдореЗрдВ)ред рдПрдирдХреЛрдбрд┐рдВрдЧ рдПрдиреЛрдЯреЗрд╢рди рдХреЗрд╡рд▓ рдЯрд╛рдЗрдк рдЪрд╛рд░ , рдХрд╛рд╕реНрдЯ рдЪрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ,char * рдпрд╛ const char * ред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдм рдлреВ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдлреВ рдлрд╝рдВрдХреНрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ foo рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕рдВрдХрд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ foo рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдореЗрдХ рдХрдорд╛рдВрдб рдХреЛ рдЗрдирд╡реЙрдЗрд╕ рдХрд░рдХреЗ , рдФрд░ рдлрд┐рд░ pyfoo_c_02 рдЙрджрд╛рд╣рд░рдг рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдХрдорд╛рдВрдб, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, sip-wheel рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ ред Pyfoo-0.2-cp38-cp38-manylinux1_x86_64.whl рдлрд╝рд╛рдЗрд▓ рдпрд╛ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА , рдЬрд┐рд╕реЗ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

pip install --user --upgrade pyfoo-0.2-cp38-cp38-manylinux1_x86_64.whl

рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛, рддреЛ рдкрд╛рдпрдерди рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдлреВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ :

>>> from foo import foo

>>> foo(b'qwerty')
12

>>> foo('qwerty')
12

>>> foo('')
24

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдм рд╣рдо foo рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд░реВрд╕реА рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдлреВ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░реЛрдВ рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рд░ рдмрдбрд╝реЗ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдлрд╝реВ рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд▓рдВрдмрд╛рдИ (рдФрд░ рдЗрд╕реЗ рджреЛрдЧреБрдирд╛) рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд╛рд░ * рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рд╣реИ , рдФрд░ рдЪреВрдВрдХрд┐ UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд░реВрд╕реА рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ 2 рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВ, рдлрд┐рд░ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рдж рдЪрд╛рд░реНрдЯ * рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдЖрдХрд╛рд░ рдЕрдЬрдЧрд░ рдХреЗ рддрд╛рд░ рджреЛ рдмрд╛рд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд┐рдХрд▓реЗред

рдареАрдХ! рд╣рдордиреЗ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛рдлреВ , рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдРрд╕реЗ рджрд░реНрдЬрдиреЛрдВ рдпрд╛ рд╕реИрдХрдбрд╝реЛрдВ рдХрд╛рд░реНрдп рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛? рдЕрдХреНрд╕рд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрдХ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИ, рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдирдХреЛрдбрд┐рдВрдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЙрджреНрджреЗрд╢реНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, SIP рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдХреБрдЫ рдЕрдиреНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, % DefaultEncoding рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ pyfoo_c_03 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

Directive % DefaultEncoding рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ pyfoo.sip рдХреЛ рдмрджрд▓реЗрдВ, рдЕрдм рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

%Module(name=foo, language="C")
%DefaultEncoding "UTF-8"

int foo(char*);

рдЕрдм, рдпрджрд┐ рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ рдЪрд╛рд░ , рдЪрд╛рд░ * , рдЖрджрд┐ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред рдпрджрд┐ рдХреЛрдИ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрдиреЛрдЯреЗрд╢рди рдирд╣реАрдВ рд╣реИ , рддреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ % DefaultEncoding рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рд░реВрдкрд╛рдВрддрд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП char * , рдЖрджрд┐ред рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ ред

рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг pyfoo_c_03 рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ рдПрдХрддреНрд░ рдФрд░ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рд╣реА рд╕рддреНрдпрд╛рдкрд┐рдд pyfoo_c_02 рдлрд╝реЛрд▓реНрдбрд░ ред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ project.py рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рдзрд╛рдирд╕рднрд╛


рдЕрдм рддрдХ рд╣рдордиреЗ рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдлрд╛рдЗрд▓реНрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ - pyproject.toml рдФрд░ pyfoo.sip ред рдЕрдм рд╣рдо рдПрдХ рдФрд░ рдРрд╕реА рдлрд╛рдЗрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╣реЛрдо рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде, рд╣рдо рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреА рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓реЛ рдирд┐рд░реНрдорд╛рдг рд╕реНрд╡рдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рд╕реЗ pyfoo_c_01 - pyfoo_c_03 рдЙрджрд╛рд╣рд░рдг рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдЖрдкрдХреЛ рдкрд╣рд▓реЗ foo / рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛, рд╡рд╣рд╛рдВ рдореЗрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ , рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдБ рдЬрд╣рд╛рдБ proroject.toml рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдкреИрдХреЗрдЬ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рд╕рд┐рдк- * рдЖрдЬреНрдЮрд╛ ред

рдЕрдм рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЬрдм sip-build , sip-sdist рдФрд░ sip-wheel рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рддреЛ foo C- рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдкрд╣рд▓реЗ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИ , рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХрдорд╛рдВрдб рдХреЛ рдкрд╣рд▓реЗ рд╣реА рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдЦрдВрдб рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг pyfoo_c_04 рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ ред

рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ project.py рдлрд╝рд╛рдЗрд▓ (рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рд╕реЗ рд▓реА рдЧрдИ рд╣реИ рдХрд┐ sipbuild.Project рд╡рд░реНрдЧ ред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдРрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЕрдкрдиреЗ рджрдо рдкрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:

  • рдирд┐рд░реНрдорд╛рдг ред рд╕рд┐рдк-рдмрд┐рд▓реНрдб рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ ред
  • build_sdist ред рдЬрдм sip-sdist рдХрдорд╛рдВрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред
  • build_wheel ред рдЬрдм рд╕рд┐рдк-рд╡реНрд╣реАрд▓ рдХрдорд╛рдВрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред
  • рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ред рдЬрдм рд╕рд┐рдк-рдЗрдВрд╕реНрдЯреЙрд▓ рдХрдорд╛рдВрдб рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рдпрд╣реА рд╣реИ, рд╣рдо рдЗрди рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рд╕реВрдЪреАрдмрджреНрдз рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рд░ рд╡рд░реНрдЧ sipbuild.AbstractProject рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ sipbuild.Project рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде

рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╣реЛрдо рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ :

import os
import subprocess

from sipbuild import Project

class FooProject(Project):
    def _build_foo(self):
        cwd = os.path.abspath('foo')
        subprocess.run(['make'], cwd=cwd, capture_output=True, check=True)

    def build(self):
        self._build_foo()
        super().build()

    def build_sdist(self, sdist_directory):
        self._build_foo()
        return super().build_sdist(sdist_directory)

    def build_wheel(self, wheel_directory):
        self._build_foo()
        return super().build_wheel(wheel_directory)

    def install(self):
        self._build_foo()
        super().install()

рд╣рдордиреЗ FooProject рдХреНрд▓рд╛рд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХреА , рдЬреЛ sipbuild.Project рдХреНрд▓рд╛рд╕ рд╕реЗ рд▓реА рдЧрдИ рд╣реИ , рдФрд░ рдЗрд╕рдореЗрдВ рдмрд┐рд▓реНрдб , build_sdist , build_wheel рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ , рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕реНрдерд╛рдкрд┐рдд рдХреА рд╣реИрдВ ред рдЗрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ, рд╣рдо _build_foo рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реЗ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ , рдЬреЛ foo рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореЗрдХ рдХрдорд╛рдВрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ build_sdist рдФрд░ build_wheel рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрд╕рдЖрдИрдкреА рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдореЗрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ



рдлреВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ , рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрджрд┐ рдЖрдк рдЕрдм pyfoo_c_04 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рд┐рдк-рд╡реНрд╣реАрд▓ рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ , рддреЛ рдПрдХ рдлрд╛рдЗрд▓ pyfoo-0.4-cp38-cp38-manylinux1_x86_64.white рдпрд╛ рдЖрдкрдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдкрд╛рдпрдерди рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд╛рдо рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред

рдпрд╣ рдкреИрдХреЗрдЬ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

pip install --user --upgrade pyfoo-0.4-cp38-cp38-manylinux1_x86_64.whl

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлреВ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдлреВ рдлрд╝рдВрдХреНрд╢рди рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВ


рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг pyfoo_c_05 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИ , рдФрд░ рдкреИрдХреЗрдЬ рдореЗрдВ 0.5 рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рд╣реИ ( pyproject.toml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рджреЗрдЦреЗрдВ )ред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреБрдЫ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЕрдкрдиреА Project.py рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдПрдБрдЧреЗ рдФрд░ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдирдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВрдЧреЗред

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╣рдо рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдлреВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкрд╛рдпрдерди рдмрд╛рдзреНрдпрдХрд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ SIP рдореВрд▓ рд░реВрдк рд╕реЗ Qt рдЬреИрд╕реА рд╡рд┐рд╢рд╛рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдВрдзрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧрд┐рдЯ рд╕реЗ рд╕рдмрдореЙрдбрд▓реНрд╕ рд╕реНрд░реЛрдд рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдПрд╕рдЖрдИрдкреА рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЗрдбрд░ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд░рдЦрдиреЗ рдХреЗ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рджреЛ рдирдП рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдлрд╝рд╛рдЗрд▓ foo.h рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдкреИрд░рд╛рдореАрдЯрд░ --foo-include-dir)) рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ (рдкреИрд░рд╛рдореАрдЯрд░ --foo- рд▓рд╛рдЗрдмреНрд░реЗрд░реА-рдбреАрдЖрдИрдЖрд░ ) рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рдпрджрд┐ рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдлреВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрднреА рднреА рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рдд рд╣реИред

рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╣реЛрдо рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ , рдФрд░ рдЗрд╕рдореЗрдВ sipbuild.Project рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ ред рдЪрд▓рд┐рдП рдкрд╣рд▓реЗ project.py рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ , рдФрд░ рдлрд┐рд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

import os

from sipbuild import Option, Project

class FooProject(Project):
    """        
       foo.
    """

    def get_options(self):
        """     . """

        tools = ['build', 'install', 'sdist', 'wheel']

        #   .
        options = super().get_options()

        #   
        inc_dir_option = Option('foo_include_dir',
                                help="the directory containing foo.h",
                                metavar="DIR",
                                default=os.path.abspath('foo'),
                                tools=tools)
        options.append(inc_dir_option)

        lib_dir_option = Option('foo_library_dir',
                                help="the directory containing the foo library",
                                metavar="DIR",
                                default=os.path.abspath('foo/bin'),
                                tools=tools)

        options.append(lib_dir_option)

        return options

    def apply_user_defaults(self, tool):
        """    . """

        #     
        super().apply_user_defaults(tool)

        #  ,         
        self.foo_include_dir = os.path.abspath(self.foo_include_dir)
        self.foo_library_dir = os.path.abspath(self.foo_library_dir)

    def update(self, tool):
        """   . """

        #   pyfoo
        # (  pyproject.toml  [tool.sip.bindings.pyfoo])
        foo_bindings = self.bindings['pyfoo']

        #   include_dirs  
        if self.foo_include_dir is not None:
            foo_bindings.include_dirs = [self.foo_include_dir]

        #   library_dirs  
        if self.foo_library_dir is not None:
            foo_bindings.library_dirs = [self.foo_library_dir]

        super().update(tool)

рд╣рдо рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ FooProject рд╡рд░реНрдЧ , рд╕реЗ рдкреНрд░рд╛рдкреНрдд sipbuild.Project ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдлреВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рдЕрдХреНрд╖рдо рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рддрдХ рдмрдВрдзрди рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ, рддрдм рддрдХ рд╣реЗрдбрд░ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реЗрдВ рддреИрдпрд╛рд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред FooProject

рд╡рд░реНрдЧ рдореЗрдВ рддреАрди рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ : get_options , apply_user_defaults рдФрд░ рдЕрджреНрдпрддрди ред рдЙрди рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЪрд▓реЛ get_options рд╡рд┐рдзрд┐ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ ред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ sipbuild.Option рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП

ред рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рд╣реИред рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░, рд╣рдо рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдк ( рд╡рд┐рдХрд▓реНрдк рдЪрд░ ) рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ , рдлрд┐рд░ рджреЛ рдирдП рд╡рд┐рдХрд▓реНрдк ( --foo_include_dir рдФрд░ --foo_library_dir ) рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рд╕реВрдЪреА рдХреЛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдХрд▓реНрдк

рд╡рд░реНрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдПрдХ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ (рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдирд╛рдо) рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рдХрд╛рд░, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди, рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рд╡рд░рдг рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ :

  • help , , sip-wheel -h
  • metavar тАФ , , . metavar ┬лDIR┬╗, , тАФ .
  • default тАФ . , , foo , ( ).
  • tools тАФ , . sip-build, sip-install, sip-sdist sip-wheel, tools = ['build', 'install', 'sdist', 'wheel'].

рдирд┐рдореНрди рдУрд╡рд░рд▓реЛрдбреЗрдб apply_user_defaults рдкрджреНрдзрддрд┐ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЧреБрдЬрд░ рд╕рдХрддрд╛ рд╣реИред Apply_user_defaults рд╡рд┐рдзрд┐ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╕реЗ рдПрдХ рдмрдирд╛рддрд╛ рд╣реИ рдЪрд░ (рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп) рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП get_options рд╡рд┐рдзрд┐ , рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдмрдирд╛рдпрд╛ рдЪрд░ рдЗрд╕рд▓рд┐рдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХрд┐ рдЖрджреЗрд╢ рдкрдВрдХреНрддрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдмрдирд╛рдИ рд╕рднреА рдЪрд░ рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдореВрд▓рднреВрдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЪрд░ self.foo_include_dir рдФрд░ self.foo_library_dir рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╡реЗ рд╡рд┐рдХрд▓реНрдк рд╡рд░реНрдЧ ( рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ ) рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд▓реЗрдВрдЧреЗ ред рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрд╕реЗ рдпрд╛ рддреЛ рдХреЛрдИ рднреА рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА, рдпрд╛ 0. apply_user_defaults

рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░, рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд░рд╛рд╕реНрддреЗ self.foo_include_dir рдФрд░ self.foo_library_dir рд╣рдореЗрд╢рд╛ рдирд┐рд░рдкреЗрдХреНрд╖ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдирд┐рд░реНрднрд░ рди рдХрд░реЗ рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рд╕рдордп рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝реЛрд▓реНрдбрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдЕрдВрддрд┐рдо рдЕрддрд┐рднрд╛рд░рд┐рдд рд╡рд┐рдзрд┐ рдЕрджреНрдпрддрди рд╣реИредред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЙрд╕ рд╕рдордп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pyproject.toml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓реЗрдВ рдпрд╛ рдЬреЛрдбрд╝реЗрдВ ред рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╢реАрд░реНрд╖рдХ рдФрд░ рд╡рд╕реНрддреБ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрде рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ-dirs рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп-dirs рдкреИрд░рд╛рдореАрдЯрд░, рдХреНрд░рдорд╢рдГ, рдЕрдВрджрд░ [tool.sip.bindings.pyfoo] рдЕрдиреБрднрд╛рдЧ ред рдЕрдм рд╣рдо рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╣реЛрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ , рдЗрд╕рд▓рд┐рдП pyproject.toml рдлрд╛рдЗрд▓ рдореЗрдВ рд╣рдо рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ :

[build-system]
requires = ["sip >=5, <6"]
build-backend = "sipbuild.api"

[tool.sip.metadata]
name = "pyfoo"
version = "0.3"
license = "MIT"

[tool.sip.bindings.pyfoo]
headers = ["foo.h"]
libraries = ["foo"]

рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдЕрджреНрдпрддрди рд╣рдореЗрдВ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ self.bindings рдмрдВрдж pyfoo Gat рдЙрджрд╛рд╣рд░рдг sipbuild.Bindings ред рдореБрдЦреНрдп рдирд╛рдо [tool.sip.bindings] рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред pyfoo ] pyproject.toml рдлрд╝рд╛рдЗрд▓ рд╕реЗ , рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рдЦрдВрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп include_dirs рдФрд░ library_dirs (рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдирд╛рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╢рд╛рдорд┐рд▓-dirs рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп-dirs рдПрдХ рд╣рд╛рдЗрдлрди рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХреЗ рд╕рд╛рде) рд╕реМрдВрдкрд╛ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд░рд╛рд╕реНрддреЛрдВ рд╕реЗ рдпреБрдХреНрдд рд╣реИрдВ self.foo_include_dir рдФрд░ self.foo_library_dirред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рди self.foo_include_dir рдФрд░ self.foo_library_dir рдХрд┐рд╕реА рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рд╢рд░реНрдд рд╣рдореЗрд╢рд╛ рдкреВрд░реА рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдордиреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдмрдирд╛рдП рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рджреМрд░рд╛рди рд╣реЗрдбрд░ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрде рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХреНрдпрд╛ рд╣реБрдЖред

рдкрд╣рд▓реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, pyfoo_c_05 / foo рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдореЗрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ , рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрд┐рд▓реНрдб рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рдЙрд╕рдХреЗ рдмрд╛рдж, рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдВpyfoo_c_05 рдФрд░ sip-wheel рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ ред рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, pyfoo-0.5-cp38-cp38-manylinux1_x86_64.whl рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред

рдЕрдм рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ foo рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдмрд╛рд╣рд░ рдХрд╣реАрдВ pyfoo_c_05 рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рдШреВрдВрдЯ рдкрд╣рд┐рдпрд╛ рдЖрджреЗрд╢ рдХреЛ рдлрд┐рд░ рд╕реЗ ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдпрд╣ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ:

usr/bin/ld:   -lfoo
collect2: :  ld     1
sip-wheel: Unable to compile the 'foo' module: command 'g++' failed with exit status 1

рдЙрд╕рдХреЗ рдмрд╛рдж, рдирдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рдк-рд╡реНрд╣реАрд▓ рдЪрд▓рд╛рдПрдВ :

sip-wheel --foo-include-dir ".../foo" --foo-library-dir ".../foo/bin"

рджреАрд░реНрдШрд╡реГрддреНрдд рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдиреЗ рдЗрдХрдЯреНрдареЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдлреВ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдерд╛ ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ .whl рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрдирд╛рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреА рддрд░рд╣ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Project.py рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХреНрд░рдо рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ


рдЕрдЧрд▓рд╛ рдЙрджрд╛рд╣рд░рдг, рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрдЧрд╛; рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдХреНрд░рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ , рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рдУрд╡рд░рд▓реЛрдб рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрдм рдЪрд░ рдХреЛ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╕реНрд░реЛрдд рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ pyfoo_c_06 рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕рд╛рд░ рдЙрди рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ FooProject рд╡рд░реНрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдереЗ , рдЬреЛ рдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╣реЛрдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ , рдФрд░ рдкреНрд░рд┐рдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ , рдЬреЛ рдЙрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдирд╛рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕реНрдерд┐рдд рд╣реИ:

from sipbuild import Project

class FooProject(Project):
    def get_options(self):
        print('get_options()')
        options = super().get_options()
        return options

    def apply_user_defaults(self, tool):
        print('apply_user_defaults()')
        super().apply_user_defaults(tool)

    def apply_nonuser_defaults(self, tool):
        print('apply_nonuser_defaults()')
        super().apply_nonuser_defaults(tool)

    def update(self, tool):
        print('update()')
        super().update(tool)

    def build(self):
        print('build()')
        super().build()

    def build_sdist(self, sdist_directory):
        print('build_sdist()')
        return super().build_sdist(sdist_directory)

    def build_wheel(self, wheel_directory):
        print('build_wheel()')
        return super().build_wheel(wheel_directory)

    def install(self):
        print('install()')
        super().install()

рдЪреМрдХрд╕ рдкрд╛рдардХреЛрдВ рдХреЛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкрд╣рд▓реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, apply_nonuser_defaults () рд╡рд┐рдзрд┐ , рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рдмрд╛рдд рдирд╣реАрдВ рдХреА рдереА , рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реИ ред рдпрд╣ рд╡рд┐рдзрд┐ рдЙрди рд╕рднреА рдЪрд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Pyproject.toml

рдлрд╝рд╛рдЗрд▓ рдореЗрдВ , рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рдкрде рд▓реМрдЯрд╛рдПрдБ :

[build-system]
requires = ["sip >=5, <6"]
build-backend = "sipbuild.api"

[tool.sip.metadata]
name = "pyfoo"
version = "0.4"
license = "MIT"

[tool.sip.bindings.pyfoo]
headers = ["foo.h"]
libraries = ["foo"]
include-dirs = ["foo"]
library-dirs = ["foo/bin"]

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП , рдЖрдкрдХреЛ рдореЗрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ foo рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╡рд╣рд╛рдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред рдЙрд╕рдХреЗ рдмрд╛рдж, pyfoo_c_06 рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рд▓реМрдЯреЗрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд┐рдк-рд╡реНрд╣реАрд▓ рдХрдорд╛рдВрдб ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рдЖрдк рд╕рдВрдХрд▓рдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: get_options ( ) apply_nonuser_defaults () get_options () get_options () apply_user_defaults () get_options () рдЕрджреНрдпрддрди ( рдпреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛: pyfoo)ред build_wheel () pyfoo рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдирд╛ ... 'рдлреВ' рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕рдВрдХрд▓рди ... рдкрд╣рд┐рдпрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред














рдмреЛрд▓реНрдб рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдереНрд░реВ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддреЗ рд╣реИрдВ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ get_options рд╡рд┐рдзрд┐ рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рджрд╕реНрдп рдЪрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ ред рдЗрд╕рдХреЗ рд▓рд┐рдП get_options рд╡рд┐рдзрд┐ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рднреА рдпрд╛рдж рд░рдЦрдирд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧреА рд╣реИ apply_nonuser_defaults рд╡рд┐рдзрд┐ рд╣реИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рд╕реЗ рдкрд╣рд▓реЗ apply_user_defaults рд╡рд┐рдзрд┐ рд╣реИ, рдЕрд░реНрдерд╛рдд рдореЗрдВ apply_user_defaults рд╡рд┐рдзрд┐ рдпрд╣ рд╣реИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд░ рдЬрд┐рдирдХреЗ рдорд╛рди рдореЗрдВ рд╕реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ apply_nonuser_defaults рд╡рд┐рдзрд┐ ред

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ, рд╡рд┐рдзрд┐ рд╕реАрдзреЗ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, build_wheel рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ ред

рдкрд╣рд▓реЗ рднрд╛рдЧ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ C рдпрд╛ C ++ рдореЗрдВ рд▓рд┐рдЦреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП SIP рдЯреВрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд▓реЗрдЦ рдХреЗ рдЗрд╕ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд╕реА рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрд╕рдЖрдИрдкреА рдХреЗ рдореВрд▓ рдХреА рдЬрд╛рдВрдЪ рдХреАред

рд╣рдордиреЗ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рдПрд╕рдЖрдИрдкреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Pyproject.toml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреИрдХреЗрдЬ (рдирд╛рдо, рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛, рд▓рд╛рдЗрд╕реЗрдВрд╕ рдФрд░ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред Project.py рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдХреА рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C- рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░реЗрдВ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╣реЗрдбрд░ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рджреЗрдВред * .Sip

рдлрд╝рд╛рдЗрд▓ рдореЗрдВрдЙрди рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реЛрдВрдЧреЗред * .Sip рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо C ++ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдПрдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдПрдВрдЧреЗ, рдФрд░ рдЗрд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╣рдо рдЙрди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВрдЧреЗ, рдЬреЛ C ++ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗ, рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рд╣рдо рдЕрдкрдиреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред

рдЬрд╛рд░реА рд░рд╣рддреА рд╣реИред

рд╕рдВрджрд░реНрдн



All Articles