what’s the difference between pyenv, virtualenv, virtualenvwrapper

My first post was about Python ‘virtualenv‘ – started with what is a virtual environment, why we need it, and a minimal example.  The purpose was to clarify beginners about what they get to see in almost every Python example. After that I also wrote about pyenv, and virualenvwrapper, felt like I may have enhanced the confusion here, all the starters might be having the question – what’s the difference between pyenv, virtualenv, virtualenvwrapper ? hence the today’s post title.
As you all know already that a virtual environment is ” a separate Python interpreter with its own set of installed packages.”

Continue reading “what’s the difference between pyenv, virtualenv, virtualenvwrapper”

Vagrantfile explained

Post’s pre-requisites:

You must understand each and every word in ‘vagrant up‘, otherwise the following text won’t make much sense to you.

A minimal Vagrantfile

Let’s start with a minimal Vagrantfile, which you’ll get on executing vagrant init hashicorp/precise64:


# -*- mode: ruby -*-
# vi: set ft=ruby :# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.# Every Vagrant development environment requires a box. You can search for
# boxes at https://atlas.hashicorp.com/search.
config.vm.box = "hashicorp/precise64"# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: ""# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
# View the documentation for the provider you are using for more
# information on available options.# Define a Vagrant Push strategy for pushing to Atlas. Other push strategies
# such as FTP and Heroku are also available. See the documentation at
# https://docs.vagrantup.com/v2/push/atlas.html for more information.
# config.push.define "atlas" do |push|
# end# Enable provisioning with a shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2

Continue reading “Vagrantfile explained”

Vagrant: VirtualBox and GuestAdditions version

One last thing about Vagrant (setup and installation) I want to share with you guys is, syncing the VirtualBox and GuestAdditions versions. I hope you’re here after going through the previous Vagrant posts ‘Installing Vagrant on CentOS 7‘ and ‘Vagrant 101‘ – on setting up the first VM (i.e. precise64), when you executed the ‘vagrant up’ for the first time, you may end up getting the following warning message:

Continue reading “Vagrant: VirtualBox and GuestAdditions version”

Better management of Python virtual environments with virtualenvwrapper

After writing about ‘what is virtualenv‘  and pyenv  I have been feeling a compulsion to write about the one remaining tool in the family i.e. virtualenvwrapper.
As it is in the name, virtualenvwrapper is just a wrapper (an extension) around the virtualenv. The sole motive behind writing it, is covering the discrepancies or features virtualenv lacks, and biggest issue is managing these virtualenvs. As stated in the official docs, the main value-adding features of virtualenvwrapper are:
  • Organizes all of the virtual environments at a single location.
  • Provides better management of virtualenvs – intuitive commands for creating, deleting, copying virtualenvs.
  • A single command to switch between environments i.e. workon (demonstrated later in the post)
  • User-configurable hooks for all operations (see Per-User Customization).
  • Plugin system for more creating shareable extensions (see Extending Virtualenvwrapper).

Continue reading “Better management of Python virtual environments with virtualenvwrapper”

The story behind ‘vagrant up’ – Vagrant 101

You’re a curios tech guy, who wants to test every new Linux package, or a tech blogger who has an impulsion to write a step-by-step guide for installation of a seemingly complex tool/software, or simply a developer who needs to test some new stack with all the operating system level dependencies, all you need is a lightweight, quickly up, portable development environment. The good news is we have Vagrant – a simple to use virtual machine management tool. With Vagrant setting up a fresh development sandbox is just a matter of few commands – at max 3 step process:
  1. Setup – download and install Vagrant – Installing Vagrant on CentOS 7.
  2. Configure – Create a single file i.e. ‘Vagrantfile’, to specify the specs for the virtual machine you want Vagrant to spawn, and run vagrant init <box-to-use>;
  3. Work – simply run ‘vagrant up‘, and a clean development environment will be there.

Continue reading “The story behind ‘vagrant up’ – Vagrant 101”

Installing Vagrant on CentOS 7

Vagrant is virtual machine configuration and provisioning utility – uses VirtualBox, VMWare, KVM, etc for virualization and Puppet, Chef, Ansible, or shell scripts for provisioning.

Step 0 – Pre-requisites for Vagrant

The setup just requires VirtualBox to be installed – as Vagrant runs on top of a virtualization software. Here is a previous post – “Install VirtualBox 5.1 for CentOS 7/RHEL 7“. I am also listing the steps/commands here:
# cd /etc/yum.repos.d/
# wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo
# yum update -y
# yum -y install epel-release
# yum -y install gcc make patch  dkms qt libgomp
# yum -y install kernel-headers kernel-devel fontforge binutils glibc-headers glibc-devel
# yum -y install VirtualBox-5.1

Step 1 – Install Vagrant

You can download the Vagrant as per your platform – for this post we’ll be downloading it for CentOS 7. The latest available version is 1.8.6.
# wget https://releases.hashicorp.com/vagrant/1.8.6/vagrant_1.8.6_x86_64.rpm

Continue reading “Installing Vagrant on CentOS 7”

Install VirtualBox 5.1 for CentOS 7/RHEL 7

VirtualBox (aka Oracle VM VirtualBox) is an open-source “full virtualization” solution by Oracle Corporation. Basically it is a hypervisor, which makes it possible to install an unmodified OS on top of your existing host OS – these environments are generally termed as virtual machines or guest machines (the base machine the Host). Hypervisors i.e. VirtualBox provide a virtualization layer i.e. making it possible for the guest machines to access the abstracted hardware resources.

Continue reading “Install VirtualBox 5.1 for CentOS 7/RHEL 7”

pyenv – managing multiple Python versions

You may be a mid-level Python programmer using Python 2.7.5 for sometime, but also curious about Python 3.x.x, or check for yourself what is this all the Python 2 vs 3 debate over Internet, or simply the new functionalities or conventions being introduced in Python 3.x.x. or, just a Python newbie starting off and all so confused given the Python version debate. Don’t worry, my friends you have been rescued – you can keep multiple versions of Python (as many as you like).
There may be lot ways to install multiple Python versions, in the post I’ll be focusing on doing it using penv. – as it’s the most elegant way to do so.

Continue reading “pyenv – managing multiple Python versions”