Python equivalent of npm or rubygems

PythonRubygemsNpm

Python Problem Overview


I've been looking around for a package manager that can be used with python. I want to list project dependencies in a file. For example ruby uses Gemfile where you can use bundle install. How can I achieve this in python?

Python Solutions


Solution 1 - Python

The pip tool is becoming the standard in equivalent of Ruby's gems. Like distribute, pip uses the PyPI package repository (by default) for resolving and downloading dependencies. pip can install dependencies from a file listing project dependencies (called requirements.txt by convention):

pip install -r requirements.txt

You can "freeze" the current packages on the Python path using pip as well:

pip freeze > requirements.txt

When used in combination with the virtualenv package, you can reliably create project Python environments with a project's required dependencies.

Solution 2 - Python

Pipenv

(I know it's an old question, and it already has an answer but for anyone coming here looking for a different answer like me.)

I've found a very good equivalent for npm, It's called pipenv. It handles both virtualenv and pip requirements at the same time so it's more like npm.


Simple Use Case

pip install pipenv

then you can make a new virtualenv with third version of python, as well as making a pipfile that will be filled with your projects requirement and other stuff:

pipenv install --three

using your created virtualenv:

pipenv shell

installing a new python package:

pipenv install requests

running your .py file is like:

pipenv run python somefile.py

you can find it's doc here.

Solution 3 - Python

Python uses pip for a package manager. The pip install command has a -r <file> option to install packages from the specified requirements file.

Install command:

pip install -r requirements.txt

Example requirements.txt contents:

Foo >= 1.2
PickyThing <1.6,>1.9,!=1.9.6,<2.0a0,==2.4c1
SomethingWhoseVersionIDontCareAbout

See the Requirements Parsing section of the docs for a full description of the format: https://pip.pypa.io/en/stable/user_guide/#requirements-files

Solution 4 - Python

This is how I restrict pip's scope to the current project. It feels like the opposite if you're coming from NodeJS's npm or PHP's composer where you explicitly specify global installations with -g or --global.

If you don't already have virtualenv installed, then install it globally with:

 pip install virtualenv

Each Python project should have its own virtualenv installation. It's easy to set one up, just cd to your project's root and:

 python3 -m virtualenv env  # creates env folder with everything you need

Activate virtualenv:

 source env/bin/activate

Now, any interaction with pip is contained within your project.

Run pip install package_name==version for each of your dependencies. They are installed in ./env/lib/python3.x/site-packages/

When you want to save your project's dependencies to a file, run:

 pip freeze > requirements.txt

You actually don't need -l or --local if you're in an activated project-specific virtualenv (which you should be).

Now, when you want to install your dependencies from requirements.txt, set up your virtualenv, and run:

 pip install -r requirements.txt

That's all.

Solution 5 - Python

Here is a comparison of pipenv vs poetry vs pdm: https://dev.to/frostming/a-review-pipenv-vs-poetry-vs-pdm-39b4 The conclusion is that pdm is the winner.

But in my experience, poetry is easier than pdm to integrate with IDEs.

Solution 6 - Python

This is an old question but things are constantly evolving.

Further to the other answer about pipenv. There is also a python package manger called poetry.

There is a detailed comparison between pipenv and poerty here: https://stackoverflow.com/questions/58218592/feature-comparison-between-npm-pip-pipenv-and-poetry-package-managers. It also links the features to common npm features.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDillon BensonView Question on Stackoverflow
Solution 1 - PythonBarry WarkView Answer on Stackoverflow
Solution 2 - PythonSoorenaView Answer on Stackoverflow
Solution 3 - Pythonuser2472759View Answer on Stackoverflow
Solution 4 - PythonSam MalayekView Answer on Stackoverflow
Solution 5 - PythonWilson TianView Answer on Stackoverflow
Solution 6 - PythonResonanceView Answer on Stackoverflow