2012-05-05 5 views
12

Chcę utworzyć plik setup.py, który instalowałby moje pliki w niestandardowych katalogach. Mam pewien prefiks, gdzie chciałbym uzyskać następujący wynik:konfiguracja pytona setup.py do instalacji plików w niestandardowych katalogach

/my/prefix/ 
    bin/ 
    script.sh 
    libexec/ 
    one.py 
    two.py 
    ... 
    lib/pythonX.Y/site-packages/ 
    package/... 

Mój początkowy projekt jest następujący:

/ 
    script.sh 
    one.py 
    two.py 
    ... 
    setup.py 
    package/... 
    __init__.py 
    ... 

Jaki byłby najlepszy sposób to osiągnąć? Chciałbym, aby móc zainstalować go później z czymś takim:

python setup.py install --prefix=/my/prefix 

mogę dostać „opakowanie” ładnie zainstalowany w odpowiednim katalogu, co lib/pythonX.Y/site-packages pod prefix jest domyślnym Lokalizacja. Ale czy istnieje prosty sposób, aby uzyskać script.sh na "bin" i inne pliki Pythona w "libexec"? Jedyny sposób, w jaki to widzę, to ręczne kopiowanie tych plików w moim skrypcie setup.py. Być może istnieje bardziej przejrzysty i bardziej standardowy sposób, aby to zrobić?

(edit)

Rozwiązanie

skończyło się setup.py tak:

setup(name='mylib', 
    scripts=['script.sh'], 
    data_files=[('libexec', ['one.py', 'two.py'])] 
) 

Oczywiście, można iteracyjne nad wszystkie pliki Pythona do libexec, ale Mam tylko 2-3 pliki Pythona, których potrzebuję.

(Edit2)

Dodatkowo mam setup.cfg z następujących czynności:

[install] 
prefix=/my/prefix 

i zamiast python setup.py install --prefix=/my/prefix mogę po prostu zrobić:

python setup.py install 
+0

Oto kilka przydatnych dokumentów na ten temat: https://docs.python.org/2/install/index.html#alternate-installation-unix-the-prefix-scheme i tutaj https: //docs.python. org/3/distutils/introduction.html – Pierz

Odpowiedz

8

Skrypty są obsługiwane za pomocą parametru scripts do funkcji konfiguracji. W przypadku libexec można traktować je jako pliki danych i używać opcji danych.

setup(... 
    scripts=glob("bin/*"), 
    data_files=[(os.path.join(sys.prefix, 'libexec', 'mypackage'), glob("libexec/*"))], 
    ... 
) 

Nie jestem pewien, jak to będzie działać z opcją --prefix, nigdy nie próbowałem tego.

+0

Dzięki! data_files zrobiło to za mnie. Kolejne pytanie, czy mogę mieć domyślny "prefiks"? Jeśli użytkownik nie poda żadnego, chciałbym użyć mojego własnego (zamiast domyślnego Pythona). – Ago

+1

Możesz ustawić wartości domyślne opcji w pliku setup.cfg. Jest w pliku opcji stylu .ini z sekcjami i parami nazwa-wartość. Opcje wiersza poleceń bezpośrednio tłumaczą tam opcje (usuń '-", itp.). – Keith

+0

działa jak czar, dzięki! – Ago