29
pip + virtualenv

Pip + virtualenv

Embed Size (px)

DESCRIPTION

My presentation for the very first PizzaPy.ph meetup.

Citation preview

Page 1: Pip + virtualenv

pip + virtualenv

Page 2: Pip + virtualenv

More WHY? than HOW?

Page 3: Pip + virtualenv

What’s pip?

pip is a tool for installing and managing Python packages.

Page 4: Pip + virtualenv

It’s similar to yum, apt, homebrew, rubygems, etc...

Page 5: Pip + virtualenv

$ easy_install pip

How do you get pip?

Page 6: Pip + virtualenv

easy_install is a tool for installing and managing Python packages.

Wait. What’s easy_install?

Page 7: Pip + virtualenv
Page 8: Pip + virtualenv

But wait; there’s more!If you’re using a *NIX system, you can probably install pip via your OS’s package manager.

You can probably also install Python packages using your OS’s package manager.

Page 9: Pip + virtualenv
Page 10: Pip + virtualenv

So why use pip over X?easy_install:

● I honestly don’t know, but if you enjoy parroting, click here: http:

//www.pip-installer.org/en/latest/other-tools.html#pip-compared-

to-easy-install

Your OS’s package manager:

● Versions are usually outdated, especially for large projects

Page 11: Pip + virtualenv

Basic pip usage...# Searching...

$ pip search json

# Installing...

$ sudo pip install simplejson

# Updating…

$ sudo pip install --upgrade simplejson

# Uninstalling…

$ sudo pip uninstall simplejson

Page 12: Pip + virtualenv

What’s virtualenv?

virtualenv is a tool for creating isolated Python environments.

Page 13: Pip + virtualenv

It’s similar to chroot, FreeBSD jails, Ruby’s bundler, etc...

Page 14: Pip + virtualenv

Why or when do we need virtualenv?

Page 15: Pip + virtualenv

To answer that, we have to ask another question.

Page 16: Pip + virtualenv

A system-wide install!

What happens when you install something with pip?

Page 17: Pip + virtualenv

Why is this bad?● Only one version for the entire

machine.● You’ll end up with a lot of packages on

/usr/local● I totally made the second one up so I

can use bullet points

Page 18: Pip + virtualenv

Main use cases:● Different projects are going to need

different versions of packages.● Provide packages only to the projects

that need them.

Page 19: Pip + virtualenv

TIP!

One virtualenv for each project/repo you’re working on.

Page 20: Pip + virtualenv

Basic virtualenv usage...# Creating a virtualenv...

$ virtualenv ENV # creates a directory named ENV

# Activating a virtualenv

$ source bin/activate

# Manage your virtualenv’s packages

# A new virtualenv includes pip in ENV/bin/pip

...

# Leaving a virtualenv

$ source bin/deactivate

Page 21: Pip + virtualenv

I don’t really use virtualenv.

CONFESSION TIME

Page 22: Pip + virtualenv

Use virtualenvwrapper.

Vanilla virtualenv makes me want to cry.

Page 23: Pip + virtualenv

Basic virtualenvwrapper usage...# Creating a virtualenv...

$ mkvirtualenv env_name

# Activating a virtualenv

$ workon env_name

# Manage your virtualenv’s packages

# (install, update, uninstall, etc)

...

# Leaving a virtualenv

$ deactivate

Page 24: Pip + virtualenv

REMEMBER!

Everything that happens between workon and deactivate only apply to the current virtualenv.

Page 25: Pip + virtualenv

For virtualenvs that you can “pass around”# Save all the packages you are using to a file...

$ pip freeze > requirements.txt

# Install all packages you needed from a file...

$ pip install -r requirements.txt

# Especially useful for projects with more than one person working on it...

Page 26: Pip + virtualenv

Because non sequitur...

BONUS

Page 27: Pip + virtualenv

virtualenvs and environment variables...#!/bin/bash

# $WORKON_HOME/pizzapy/bin/postactivate

export DB_NAME=pizzapy

export DB_USER=root

export DB_PASSWORD=a1f9234a0f2cbd028

export DB_HOST=192.20.12.98

export DB_PORT=3306

Page 28: Pip + virtualenv

virtualenvs and environment variables...# in your Python code...

import os

DATABASES = {

‘default’: {

‘NAME’: os.environ[‘DB_NAME’]

‘USER’: os.environ[‘DB_USER’]

‘PASSWORD’: os.environ[‘DB_NAME’]

‘NAME’: os.environ[‘DB_PASSWORD’]

‘HOST’: os.environ[‘DB_HOST’]

}

}

Page 29: Pip + virtualenv

Questions?

END