Skip to content

Python environments

kevinyu edited this page Nov 23, 2017 · 6 revisions

We are currently transitioning from Python 2.7 to Python 3.5. Most lab projects (e.g. soundsig, zeebeez, songephys) are not yet Python 3 compatible, but we are working on it. For now, use Python 2.7 but try to write Python 3 compatible code.

The two preferred ways to manage Python packages are with anaconda (miniconda), or with virtualenv.

Setup

Python 2 and Python 3 come pre-installed on new versions of Ubuntu and Mac, and should already be on your workstations. If you choose to use anaconda or anaconda3 (Python 3 version), it will modify your bashrc so that you use an installation of Python that comes with anaconda (rather than your default system version).

Creating an environment

anaconda

conda create ENV_NAME

virtualenv

  • In the root directory of each project you work on, type virtualenv env --python [python|python3] to create a new environment in env/

  • Activate the environment by running source env/bin/activate. This modifies your PATH to point to the virtualenv packages. Do this every time you need to install any packages or run any code, including starting a jupyter notebook.

Installing packages

anaconda

conda install PKG

virtualenv

pip install PKG

Packages installed with pip with a virtualenv activated are installed in env/ and cannot be seen outside the env. Similarly, packages installed with pip outside the virtualenv cannot be seen inside the virtualenv.

To start with a blank slate, just delete the env/ directory and create a new environment.

Defining project dependencies in requirements.txt

Dependencies can be defined in a "requirements" file usually called requirements.txt. Typically, it lists pypi packages with version numbers in the form PKG==VERSION. It can also include references to git repositories and commit hashes to install from a repository.

Install from a requirements file:

pip install -r requirements.txt

Python 2 to 3 migration

Here are some of the common issues you may hit when trying to move from Python 2 to 3

print

The print statement print "hello" has been replaced with the print function print("hello"). Maintain 2 and 3 compatibility by adding from __future__ import print_function and using the new syntax.

division

The division operator / will do floating point division by default. What used to be 7 / 2 == 3 will now be 7 / 2 == 3.5. In Python 3, integer (floor) division can be explicitly done with the // operator, i.e. 7 // 2 == 3. Maintain 2 and 3 compatibility by replacing any instance of integer division with // and adding from __future__ import division.

dictionary items

The old dict.items() would return a list of tuples of (key, value) pairs. In python 3, it will return a dict_items iterable. Iteration as for key, value in d.items() will still work, but other things may break...?

xrange

xrange used to be a iterator version of range. Now, range is an iterator by default and xrange no longer exists. Just replace all usages of xrange with range.

Style guide

Contents

General

Calendars and scheduling
Lab funds and purchases
Advising, Social Justice, Sexual Harassment, and Real World Shit * Support Resources

Dry lab

Getting connected to the lab network
Data storage and access
Computing
Working Remotely
Other Services

Wet lab

Animal Care

Husbandry, who to call, recordkeeping
Bird care links

Behavior

Pecking Test (NAF 125)
Field Station

Surgeries, Histology, Imaging, Waste

Certifications, protocols, techniques, and recipes
Instructions for individual pieces of equipment

Electrophysiology

Instructions
Hardware, software, and techniques for ephys

Calcium imaging

* Ca imaging Notes

fMRI

Data Collection
Data Analysis

Theory

Modulations

STRFs

Other




Old pages:

Wetlab


Pages in progress:

Clone this wiki locally