I had to deploy a django project on CentOS 6.5 and here are the steps to set up Python and then Django. The problem with CentOS 6.5 is that it comes with python 2.6.6 and it's package installer yum relies on it.
Although we can install python 2.7.x and soft link 2.7.x as the system default, it will break yum and who knows what else relies on 2.6.6. Thus, I am installing python 2.7.x via pyenv, which is suggested by this blog post.
This solution is cleaner as it does not temper with the OS default python 2.6.6.
- Update all of yum's package
yum -y update
- Install pyenv, which works like rbenv:
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
Put the following lines into your .bashrc file:
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Then, reload bashrc:
. .bashrc
This will enable the pyenv command in bash.
- Install these packages before installing python:
yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel mysql-devel
- Use this command to list all of the 2.7.x version of python (grep 3.x for python 3):
pyenv install -l | grep 2.7
- Install the python version you prefer:
pyenv install 2.7.10
- Use the newly installed version of python:
pyenv local 2.7.10
You can list all python versions abailable to pyenv by:
pyenv versions
- Update pip to its latest version:
pip install -U pip
Now, we have everything setup and ready to go. The natural thing to do next is to install virtualenv and virtualenvwrapper:
Installing virtualenv and virtualenvwrapper
WARNING: DO NOT install virtualenv and virtualenvwrapper !!!
Let me tell you what happend after I installed both via pip. I put the following lines in .bashrc
export WORKON_HOME=$HOME/.virtualenvs
source ~/.pyenv/shims/virtualenvwrapper.sh #virtualenvwrapper.sh got installed to this dir instead of /usr/local/bin/
Then, I was disconnected from the cloud server with the following warning:
pyenv: -bash: command not found
It doesn't matter what I try, I cannot connect to the cloud server anymore because every time I login successfully, I get disconnected from the server with the same error above. I cannot even login using the VNC connection provided by the cloud service provider. The only option I had was to reinstall the image on the cloud server...
I cannot find the cause of this issue on Google, but from the look of it, I messed out the path to bash so everytime I logged in, cannot find bash -> disconnect
Don't worry you can still use virtualenv
If you look under the .pyenv/plugins directory, you can see a directory named pyenv-virtualenv. This is what we can use to create virtual environments.
To create a test environment:
pyenv virtualenv test # create a virtualenv named test based on the current local or system version of python
Since we have already set our local version of python to be 2.7.10, this test env inherits from that. But if you did not set the local version, the test env will inherit from the system version of python which may not be what you want. (Note: while running the command above, the 'virtualenv' package is installed to your local version of python)
You can also specify which version of python to use (by putting a version number after 'pyenv virutalenv'):
pyenv virtualenv 2.6.6 test # use version 2.6.6 for this environment
Once the test environment has been setup, you can verify it by:
pyenv versions
You should see something similar to this:
system
* 2.7.10 (set by /.python-version)
test
You can switch to the test env by:
pyenv activate test
To deactivate:
pyenv deactivate
To list virtualenvs:
pyenv virtualenvs
To delete existing virtualenvs:
pyenv uninstall my-virtual-env
If you have seen pyenv-virtualenv's github page, you have probably noticed something named pyenv-virtualenvwrapper. Don't install it unless you know what it is. I don't have the time to figure out what it is ATM. But it is definitely NOT the virtualenv + virtualenvwrapper combination you are familiar with. So be cautious!