Jakie są odpowiedniki Pythona w pakiecie Ruby / opakowaniu Perla?

93

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 execpolecenia 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?

riywo
źródło
4
Nie, nie każdy użytkownik Pythona używa virtualenv. Osobiście nigdy tego nie potrzebowałem.
Fred Foo
Nic mi nie wiadomo o czymś dokładnie jak Ruby Bundler (która nie wiedziałem do tej pory, BTW). Używam zarówno virtualenv, jak i pip i setuptools - lub distutils lub jakiegokolwiek innego systemu dystrybucji, który znajdę najpierw w Google :) Ciekawi mnie też odpowiedź, ale to jest moje rozwiązanie przez większość czasu.
brandizzi
pipenvi shovelwymienione poniżej są bardziej nowoczesnymi opcjami od czasu zadania tego pytania.
Jim Meyer
Ani pipenv, ani łopata nie są równoważne. Łopata to nic innego jak bundler, bardziej jak grabie. Zarządzanie zależnościami w Pythonie jest dość daleko w tyle. Będzie ona zostać połączone w jeden dzień chociaż pip ( pypi.org/project/pipfile ) ...
nomas Prime

Odpowiedzi:

72

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:

  1. Instalowanie pakietów (instalacja gem)

    pip install mypackage
    
  2. 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:

    nose==1.1.2
    django<1.3
    PIL
    

    Później, gdy chciałbyś zainstalować te zależności, zrobiłbyś:

    $ pip install -r requirements.txt
    

    Prostym sposobem na wyświetlenie wszystkich aktualnych pakietów w składni pliku wymagań jest:

    $ pip freeze
    

    Więcej na ten temat przeczytasz tutaj .

  3. 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:

    $ pip install gunicorn
    $ gunicorn -h 
    
  4. Klejnoty pakietów do instalacji z pamięci podręcznej (pakiet bundler)

    Jest pip bundlei pip 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.

Denys Shabalin
źródło
46
Wspaniałą rzeczą w bundlerze jest to, że część virtualenv jest zintegrowana iw większości przypadków nie są wymagane żadne uprawnienia administratora. W rzeczywistości pakiet może być jedynym klejnotem, którego potrzebujesz na całym świecie. bundle install --path vendorinstaluje wszystko lokalnie i bundle execjest wystarczająco inteligentny, aby to rozgryźć. Nie ma potrzeby jawnych zmian środowiska.
Dębilski
11
Nie sądzę, aby punkt # 3 był poprawny. Po prostu uruchomienie pliku wykonywalnego Ruby można wykonać z lub bez bundle exec. Chodzi o bundle execto, że zmienia środowisko zgodnie z Gemfileprzed uruchomieniem pliku wykonywalnego. Pip nie ma odpowiednika bundle exec, choć virtualenv może.
Sean Mackesey
@SeanMackesey za każdym razem, gdy uruchamiasz aktywację środowiska virtualenv, natychmiast stajesz się wewnątrz środowiska, np. Python wskazuje ten w środowisku env, a nie globalnie zainstalowany, pythonpath jest poprawny w odniesieniu do środowiska env, wszystkie aplikacje również działają z tego środowiska.
Denys Shabalin
8
Najważniejsze w pakiecie jest to, że jest to teraz standard defacto, możesz prawie zagwarantować, że KAŻDY projekt rubinowy o praktycznie dowolnej wielkości będzie miał Gemfilesiedzący w swoim katalogu głównym i możesz bundle installi jesteś gotowy do pracy, lub bundle --deploymenti 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.
ocodo
16

Możesz użyć pipenv , który ma podobny interfejs z pakietem.

$ pip install pipenv

Pipenv automatycznie tworzy virtualenv i instaluje zależności z Pipfilelub Pipfile.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!')"
nonylen
źródło
3

Istnieje clone pbundler .

Wersja, która jest obecnie w pip, po prostu czyta requirements.txtplik, który już masz, ale jest znacznie nieaktualna. Nie jest też całkowicie równoważny: nalega na zrobienie pliku virtualenv. 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).

kousu
źródło
Wygląda na to, że ten projekt zniknął. Rozważmy poezję: stackoverflow.com/a/61771381/115075
bb.
1

Napisałem jeden - https://github.com/Deepwalker/pundler . Na PIP jego pundlenazwa była już zajęta.

Używa requirements(_\w+)?.txtplików jako żądanych zależności i tworzy frozen(_\w+)?.txtpliki z zamrożonymi wersjami.

O (_\w+)?rzeczy - to jest envs. Możesz utworzyć PUNDLEENV=testRequirements_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.

Mihail Krivushin
źródło
1

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-pythonstyl-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ć).

nocleg ze śniadaniem.
źródło
1

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.

Jim Meyer
źródło
0

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).

Yonsy Solis
źródło