# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # Installing Libraries

# ## Installing Libraries

# We've seen that PyPI carries lots of python libraries. But how do we install them?

# In the UCL teaching clusters, we cannot, as these need to be installed by administrators.

# So you'll need to follow this lesson on a computer of your own.

# The main problem is this: *libraries need other libraries*

# So you can't just install a library by copying code to the computer: you'll find yourself wandering down a tree
# of "dependencies"; libraries needed by libraries needed by the library you want.

# This is actually a good thing; it means that people are making use of each others'
# code. There's a real problem in scientific programming, of people who think they're really clever writing their own
# twenty-fifth version of the same thing.

# So using other people's libraries is good.

# Why don't we do it more? Because it can often be quite difficult to **install** other peoples' libraries!

# Python has developed a good tool for avoiding this: **pip**.

# ## Installing Geopy using Pip

# On a computer you control, on which you have installed python via Anaconda, you will need to open a **terminal**
# to invoke the library-installer program, `pip`.

# * On windows, go to start->all programs->Anaconda->Anaconda Command Prompt
# * On mac, start *terminal*. 
# * On linux, open a bash shell.

# Into this shell, type:
#     
# `pip install geopy`

#

# The computer will install the package automatically from PyPI. 

# Now, close IPython notebook if you have it open, and reopen it. Check your new library is installed with:

import geopy
geocoder = geopy.geocoders.GoogleV3(domain="maps.google.co.uk")
geocoder.geocode('Cambridge',exactly_one=False)

# That was actually pretty easy, I hope. This is how you'll install new libraries when you need them.

# Troubleshooting:
#     
# On mac or linux, you *might* get a complaint that you need "superuser", "root", or "administrator" access. If so type:
#
# * `sudo pip install geopy`
#
# and enter your password.
#     
# If you get a complaint like: 'pip is not recognized as an internal or external command', try the following:
#         
# * `conda install pip` (Windows)
# * `sudo easy_install pip` (Mac, Linux)
#
# Ask me over email if you run into trouble.

# ## Installing binary dependencies with Conda

# `pip` is the usual Python tool for installing libraries. But there's one area of library installation that is still awkward:
# some python libraries depend not on other **python** libraries, but on libraries in C++ or Fortran.

# This can cause you to run into difficulties installing some libraries. 
# Fortunately, for lots of these, Continuum, the makers of Anaconda, provide a carefully managed set of scripts for installing
# these awkward non-python libraries too. You can do this with the `conda` command line tool, if you're using Anaconda.

# Simply type
#
# * `conda install <whatever>`
#
# instead of `pip install`. This will fetch the python package not from PyPI, but from Anaconda's distribution for your platform, and manage any non-python dependencies too.

# Typically, if you're using Anaconda, whenever you come across a python package you want, you should check if Anaconda
# package it first using this list: http://docs.continuum.io/anaconda/pkg-docs.html. (Or just by trying `conda install` and hoping!) If you can `conda install` it, you'll likely have less problems. But Continuum don't package everything, so you'll need to `pip install` from time to time.

# ## Where do these libraries go? 

import numpy

numpy.__path__

# Your computer will be configured to keep installed Python packages in a particular place.

# Python knows where to look for possible library installations in a list of places, called the "PythonPath".
# It will try each of these places in turn, until it finds a matching library name.

import sys
sys.path[-4:] # Just list the last few

# ## Libraries not in PyPI

# Sometimes, such as for the Animation library in the Boids example, you'll need to download the source code
# directly. This won't automatically follow the dependency tree, but for simple standalone libraries, is sometimes necessary.

# To install these on windows, download and unzip the library into a folder of your choice, e.g. `my_python_libs`. 
#
# On windows, a reasonable choice
# is the folder you end up in when you open the Anaconda terminal. You can get a graphical view on this folder by typing: `explorer .`

# Make a new folder for your download and unzip the library there.

# Now, you need to move so you're inside your download in the terminal:

# * `cd my_python_libs`
# * `cd <library name>` (e.g. `cd JSAnimation-master`) 

# Now, manually install the library in your PythonPath:

# * `python setup.py install`
#
# [You might need to do
#
# * `sudo python setup.py install` 
#
# if you get prompted for 'root' or 'admin' access.]

# This is all pretty awkward, but it is worth practicing this stuff, as most of the power of using programming for
# research resides in all the libraries that are out there. 

# Finally, writing your own libraries is beyond the scope of this course, but we cover it in [Our More Advanced Python Course](http://development.rc.ucl.ac.uk/training/engineering)

StarcoderdataJupyterScriptsDedupFiltered