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?


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.


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!')"

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


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.


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


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.