======================================= Session 3: Python packages and installs ======================================= Using virtualenv ================ To create a virtual environment:: python -m virtualenv ~/env To activate it as your default Python environment:: . ~/env/bin/activate Now, even without root, you can do ``pip install`` of whatever packages you like. To deactivate it, :: deactivate Building a 'setup.py' ===================== In the sqer directory, 1. grab the latest ez_setup.py from https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py:: curl -O https://bitbucket.org/pypa/setuptools/raw/19873119647deae8a68e9ed683317b9ee170a8d8/ez_setup.py 2. Put the following in setup.py:: import ez_setup ez_setup.use_setuptools() from setuptools import setup setup(name="sqer", version="0.1", packages=['sqer'], install_requires=["screed >= 0.7"], setup_requires=["nose >= 1.0",], scripts=["count-reads.py"], test_suite = 'nose.collector', ) 3. Put the following in setup.cfg:: [nosetests] verbosity = 2 Now you can do:: python setup.py test to run the tests, and:: python setup.py install This will install 'sqer' so that (a) it's importable from anywhere, :: python -c "import sqer" and (b) the script(s) are in your path so that:: count-read-bp.py data/test-reads.fa should work from anywhere. Remember to add and commit to git:: git add setup.cfg setup.py git commit -am "added install configuration" Note that if you create a .tar.gz, :: cd .. tar czf /tmp/sqer.tar.gz sqer cd sqer you can now do:: pip install /tmp/sqer.tar.gz and this will also work with URLs to the .tar.gz as well as github files & release links... One final comments: 'git status' will show you that the directory is getting messy. Add:: *.egg *.egg-info build to .gitignore, and then commit:: git commit -am "updated gitignore with setup.py detritus" It's probably time to do a 'git push origin master' too! Building a default/basic 'Makefile' =================================== Put the following in 'Makefile' in the seqr/ directory:: all: python setup.py build install: python setup.py install clean: python setup.py clean rm -fr build test: python setup.py test .. note:: 'make' is picky about tabs vs spaces -- the lines after the ':' need to be indented with tabs to work properly. This will now let us do 'make' (which will execute the first target, 'all'); 'make install'; 'make clean'; and 'make test'. These will do the obvious things. The important thing here is that all of these are *standard* make commands. If I see a Makefile in a repository, then I assume that it's got the commands above. Convention, convention, convention! Remember to:: git add Makefile git commit -am "added Makefile" Documentation ============= We're going to build some docs using `Sphinx `__ and `reStructuredText `__. Do:: mkdir doc cd doc sphinx-quickstart Use default values for everything; specify project name, author, and version. Now, in the 'doc' directory, do:: make html and look at _build/html/index.html Let's flesh this out a bit -- edit 'index.rst' and add an indented 'details' under Contents, e.g.:: Contents: .. toctree:: :maxdepth: 2 details Now create 'details.rst' to contain:: =============== Project Details =============== sqer is awesome. Important details ================= This where all my documentation goes. ...and run 'make html' again. Look at _build/html/index.html. Be sure to do:: rm -fr _build git add * git commit -am "added docs" And also add a rule to the top-level Makefile:: doc: cd doc && make html (and git add/commit the Makefile changes.) Now, push this all to github:: git push origin master and let's go configure it at http://readthedocs.org/. Reminder: under your github project, settings, service hooks, enable the 'readthedocs' service hook.