python-devel-tools

Jacek Konieczny jajcus w bnet.pl
Pon, 26 Kwi 2004, 14:33:10 CEST


On Mon, Apr 26, 2004 at 01:54:53PM +0200, Andrzej Krzysztofowicz wrote:
> Chwila, moment. To o tym, czy cos jest skryptem pythona decyduje NAZWA a nie
> ZAWARTOSC pliku ? 
> 
> Czyli w systemie zawierajacym pythona user nie mozna sobie utworzyc programu
> (binarnego, skryptu w dowolnym interpreterze) o nazwie np. to.ma.py ktory
> nie bedzie skryptem pythona i umiesciec go w sciezce ?

To nie całkiem tak.

Gdy uruchamiasz skrypt pythona (zaczynający się od #!/usr/bin/python),
to on zwykle importuje jakieś moduły. Modułów szuka w ścieżce
wyszukiwania, która domyślnie na pierwszej pozycji zawiera katalog
w którym leży skrypt. A więc:

1. nie jest przeszukiwane całe $PATH
2. problem występuje jedynie dla plików *.py które leżą w katalogu gdzie
są jakieś uruchamiane skrypty pythona i dla których "*" jest nazwą
któregoś z modułów importowanych przez te skrypty.

IMHO najprostrzym rozwiązaniem jest nie umieszczenie plików
z rozszerzeniem *.py w $PATH. Skoro to ma być odpalane jako komenda, to
*.py tylko przeszkadza. W większości wypadków właściwy skrypt może być
gdzieś w %{_datadir}/%{name}, a w $PATH wystarczy następujący skrypcik
(bez rozszerzenia, '%{_datadir}/%{name}' oczywiście musi być podmienione
na właściwą ścieżkę):

#!/usr/bin/python

import sys
sys.path[0]='%{_datadir}/%{name}'
import skrypt

Czasem może być potrzeba odpalenia tu jakiejś funkcji (gdy właściwy
skrypt importowany jako moduł sam z siebie nic nie robi).
Takie rozwiązanie ma jeszcze jedną zaletę - właściwy skrypt może być
w postaci skompilowanej (*.pyc).

Pozdrowienia,
	Jacek



Więcej informacji o liście dyskusyjnej pld-devel-pl