Wiem o virtualenv i pip. Ale są one nieco inne niż w pakiecie / kartonie.
Na przykład:
- pip zapisuje absolutną ścieżkę do shebang lub aktywuje skrypt
- pip nie ma
exec
polecenia sub (bundle exec bar
) - virtualenv kopiuje interpreter języka Python do katalogu lokalnego
Czy każdy programista Python używa virtualenv / pip? Czy istnieją inne narzędzia do zarządzania pakietami dla języka Python?
pipenv
ishovel
wymienione poniżej są bardziej nowoczesnymi opcjami od czasu zadania tego pytania.Odpowiedzi:
Z tego, co przeczytałem o bundlerze - pip bez virtualenv powinien działać dobrze dla Ciebie. Możesz myśleć o tym jako o czymś pomiędzy zwykłym poleceniem klejnotu a pakietem. Typowe rzeczy, które możesz zrobić z pip:
Instalowanie pakietów (instalacja gem)
pip install mypackage
Zależności i instalacja zbiorcza (gemfile)
Prawdopodobnie najłatwiejszym sposobem jest użycie plików Require.txt pip. Zasadniczo jest to zwykła lista wymaganych pakietów z możliwymi ograniczeniami dotyczącymi wersji. Może to wyglądać następująco:
Później, gdy chciałbyś zainstalować te zależności, zrobiłbyś:
Prostym sposobem na wyświetlenie wszystkich aktualnych pakietów w składni pliku wymagań jest:
Więcej na ten temat przeczytasz tutaj .
Wykonanie (bundler exec)
Wszystkie pakiety Pythona, które zawierają pliki wykonywalne, są zwykle dostępne bezpośrednio po instalacji (chyba że masz niestandardową konfigurację lub jest to pakiet specjalny). Na przykład:
Klejnoty pakietów do instalacji z pamięci podręcznej (pakiet bundler)
Jest
pip bundle
ipip zip/unzip
. Ale nie jestem pewien, czy wiele osób go używa.ps Jeśli zależy Ci na izolacji środowiska, możesz również używać virtualenv razem z pip (są bliskimi przyjaciółmi i doskonale ze sobą współpracują). Domyślnie pip instaluje pakiety w całym systemie, które mogą wymagać uprawnień administratora.
źródło
bundle install --path vendor
instaluje wszystko lokalnie ibundle exec
jest wystarczająco inteligentny, aby to rozgryźć. Nie ma potrzeby jawnych zmian środowiska.bundle exec
. Chodzi obundle exec
to, że zmienia środowisko zgodnie zGemfile
przed uruchomieniem pliku wykonywalnego. Pip nie ma odpowiednikabundle exec
, choć virtualenv może.Gemfile
siedzący w swoim katalogu głównym i możeszbundle install
i jesteś gotowy do pracy, lubbundle --deployment
i to ” Po prostu uruchomię się na serwerze, nie mając wiele do zrobienia, pod warunkiem, że maszyna ma wymaganą wersję ruby. Python po prostu nie ma odpowiednika. Są narzędzia, nie ma wszechobecności kulturowej.Możesz użyć pipenv , który ma podobny interfejs z pakietem.
Pipenv automatycznie tworzy virtualenv i instaluje zależności z
Pipfile
lubPipfile.lock
.$ pipenv --three # Create virtualenv with Python3 $ pipenv install # Install dependencies from Pipfile $ pipenv install requests # Install `requests` and update Pipfile $ pipenv lock # Generate `Pipfile.lock` $ pipenv shell # Run shell with virtualenv activated
Możesz uruchomić polecenie z zakresem virtualenv, takim jak
bundle exec
.$ pipenv run python3 -c "print('hello!')"
źródło
Istnieje clone pbundler .
Wersja, która jest obecnie w pip, po prostu czyta
requirements.txt
plik, który już masz, ale jest znacznie nieaktualna. Nie jest też całkowicie równoważny: nalega na zrobienie plikuvirtualenv
. Zauważyłem, że Bundler instaluje tylko te pakiety, których brakuje i daje ci możliwość podania hasła sudo do zainstalowania w katalogach systemowych lub ponownego uruchomienia, co nie wydaje się być cechą pbundler.Jednak wersja na git jest prawie całkowitym przepisaniem, aby być znacznie bliższą zachowaniu Bundlera ... włączając w to "Cheesefile", a teraz nie obsługującą require.txt. Jest to niefortunne, ponieważ require.txt jest de facto standardem w pythonland i istnieje nawet oficjalna praca z oznaczeniem BDFL, aby go ujednolicić . Kiedy to wejdzie w życie, możesz być pewien, że coś takiego jak pbundler stanie się de facto standardem. Niestety, nic jeszcze dość stabilny, które znam (ale ja uwielbiam być w błędzie).
źródło
Napisałem jeden - https://github.com/Deepwalker/pundler . Na PIP jego
pundle
nazwa była już zajęta.Używa
requirements(_\w+)?.txt
plików jako żądanych zależności i tworzyfrozen(_\w+)?.txt
pliki z zamrożonymi wersjami.O
(_\w+)?
rzeczy - to jest envs. Możesz utworzyćPUNDLEENV=test
Requirements_test.txt, a następnie użyć tego pliku Dep w swoim przebiegu wraz z plikami Requirements.txt.A co do virtualenv - nie potrzebujesz jednego, to jest to, co pundle bierze z pakietu w pierwszej głowie.
źródło
Python Poetry jest najbliższy pakietowi Ruby od 2020 roku (a już od 2018 roku). Ma już ponad dwa lata, nadal jest bardzo aktywny, ma świetną dokumentację. Można narzekać, że
curl-pipe-python
styl-style jest zalecanym sposobem instalacji, ale istnieją alternatywy, np. Homebrew na macOS.Wykorzystuje wirtualne envs za kulisami (w przeciwieństwie do bundlera), ale zapewnia i wykorzystuje plik blokujący, dba o zależności podrzędne, przestrzega określonych ograniczeń wersji i umożliwia automatyczną aktualizację nieaktualnych pakietów. Istnieje nawet autouzupełnianie dla Twojej ulubionej powłoki.
Używając pliku pyproject.toml, idzie też nieco dalej niż bundler (bliżej gemspec. Jest również porównywalny z npm i przędzą JavaScript i TypeScript).
Poetrify (projekt uzupełniający) pomaga konwertować projekty z wymagania.txt do pyproject.toml for Poetry.
Plik blokady można wyeksportować do pliku Requirements.txt przez
poetry export -f requirements.txt > requirements.txt
, jeśli jest to potrzebne do innych narzędzi (lub w mało prawdopodobnym przypadku chcesz wrócić).źródło
Powiedziałbym, że Shovel jest wart obejrzenia. Został opracowany specjalnie dla Pythonish wersji Rake. W projekcie nie ma wielu działań związanych z zatwierdzaniem, ale wydaje się stabilny i przydatny.
źródło
Nie, nie wszyscy programiści używają virtualenv i / lub pip, ale wielu programistów używa / preferuje te narzędzia
A teraz, jeśli chodzi o narzędzia do tworzenia pakietów i różne środowiska, to jest twoje prawdziwe pytanie. W tym samym celu istnieją inne narzędzia, takie jak Buildout ( http://www.buildout.org/en/latest/ ), izoluj system kompilacji środowiska Python dla każdego zarządzanego projektu. Używam tego od jakiegoś czasu, ale nie teraz.
Niezależne środowiska na projekt, w Pythonie są trochę inne niż ta sama sytuacja w Rubim. W moim przypadku używam pyenv ( https://github.com/yyuu/pyenv ), co jest czymś w rodzaju rbenv, ale dla Pythona. różne wersje języka Python i virtualenv na projekt, aw tych izolowanych środowiskach mogę używać pip lub easy-install (w razie potrzeby).
źródło