Co możemy umieścić w pliku setup.py
, aby zapobiec gromadzeniu się pip i próbie instalacji pakietu przy użyciu nieobsługiwanej wersji Pythona?Zapobieganie instalowaniu pakietu na starych wersjach w języku Python
Na przykład magicstack
jest projektem wymienione z klasyfikatora trove:
Programming Language :: Python :: 3 :: Only
więc oczekiwać następującego zachowania jeśli pip --version
jest przywiązany do Python 2.7:
$ pip install magicstack
Collecting magicstack
Could not find a version that satisfies the requirement magicstack (from versions:)
No matching distribution found for magicstack
Ale rzeczywiste zachowanie jest, że pip zbiera wydanie, pobiera je, próbuje je zainstalować i kończy się niepowodzeniem. Są na przykład inne wydania tylko Python3, na przykład curio
, które faktycznie instalują się dobrze - ponieważ setup.py
nie używał niczego specyficznego dla Python 3 - tylko po to, by zawieść w czasie importu, gdy używana jest tylko składnia tylko Python 3. I jestem pewien, że istnieją pakiety, które instalują OK, importują OK, a może tylko kończą się niepowodzeniem!
Jaka jest poprawna metoda określania obsługiwanych wersji Pythona w sposób, który będzie respektowany przez pip? Znalazłem obejście problemu, obejmujące przesyłanie tylko pliku koła i odmowę przesłania dystrybucji .tar.gz, ale chciałbym poznać poprawną poprawkę.
Edit: Jak pip wiedzieć nie ściągnąć rozmieszczenia kół czy Python/os/architektura nie jest dopasowanie? Czy po prostu używasz .whl filename convention, czy jest coś bardziej wyrafinowanego niż to, co dzieje się za kulisami? Czy możemy w jakiś sposób przekazać metadane do dystrybucji źródłowej, aby pip zrobił to, co trzeba z plikami .tar.gz?
nie wiem, że to jest odpowiedź _right_ ... ale jeśli 'magicstack' jest python3 tylko dlatego' setup.py' nie na python2.x, to wydaje się, że jednym z możliwych sposobów, aby ta praca jest zmusić twój plik 'setup.py' do błędu w nieodpowiednich wersjach pythona ... – mgilson
Hacky. Jeśli pip jest powiązany z nieobsługiwanym interpreterem Pythona, nie chcę, aby pakiet był zbierany lub pobierany w ogóle, nie mówiąc już o próbie instalacji, wykonując 'setup.py'. – wim
Google pojawia się jakiś [poprzedni] (http://stackoverflow.com/questions/13924931/setup-py-restrict-the-allowable-version-of-the-python-interpreter) [pytania] (http: // stackoverflow .com/questions/13385337/distribute-distutils-specify-python-version) z odpowiedziami mówiącymi, że twój plik 'setup.py' sprawdza wersję Pythona. – user2357112