SlideShare a Scribd company logo
Isolated Development
            in Python
1. pip installer
pip installer


 $ pip install <package>
pip installer


 $ pip install <package>


                Download package from pypi.python.org
pip installer


 $ pip install <package>


                Download package from pypi.python.org




 $ pip install <directory>
 $ pip install <tar.gz>
pip installer


 $ pip install <gitrepo>
pip installer


 $ pip install <gitrepo>




                           GREAT!!
pip installer


 $ pip install <gitrepo>




                           GREAT!!
 $ pip install git+git://github.com/ajdiaz/mole
 $ pip install git+ssh://github.com/ajdiaz/mole
 $ pip install git+git://github.com/ajdiaz/mole@840d25
 $ pip install git+git://github.com/ajdiaz/mole@devel-branch
 $ pip install git+git://....@devel-branch#egg=Mole
pip installer


 $ pip freeze
pip installer


 $ pip freeze
 Fabric==1.5.2
 GitPython==0.3.2.RC1
 Jinja2==2.6
 Pygments==1.6
 Sphinx==1.2b1          Create requirements.txt
 argparse==1.2.1
 async==0.6.1
 boto==2.7.0
 cuisine==0.5.1
 distribute==0.6.24
 docutils==0.10
 gitdb==0.5.4
 mico==0
 paramiko==1.9.0
 pycrypto==2.6
 smmap==0.8.2
 wsgiref==0.1.2
2. Virtualenv: a jail for python
Virtualenv: the python jail


 $ virtualenv --python=/usr/bin/python2.7 mynewenvironment
Virtualenv: the python jail


 $ virtualenv --python=/usr/bin/python2.7 mynewenvironment




                      OR EVEN BETTER
Virtualenv: the python jail


 $ virtualenv --python=/usr/bin/python2.7 mynewenvironment




                      OR EVEN BETTER




 $ mkvirtualenv --python=/usr/bin/python2.7 mynewenvironment
Virtualenv: the python jail


  $ virtualenv --python=/usr/bin/python2.7 mynewenvironment




                       OR EVEN BETTER




  $ mkvirtualenv --python=/usr/bin/python2.7 mynewenvironment




mkvirtualenvwrapper
Virtualenvwrapper


$ mkvirtualenv test
Virtualenvwrapper


$ mkvirtualenv test
New python executable in test/bin/python
Installing
distribute......................................................................................................................
.......................................................................done.
Installing pip...............done.
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/preactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/get_env_details
(test) $
Virtualenvwrapper


$ mkvirtualenv test
New python executable in test/bin/python
Installing
distribute......................................................................................................................
.......................................................................done.
Installing pip...............done.
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/preactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/get_env_details
(test) $ which python
/home/ajdiaz/env/test/bin/python
Virtualenvwrapper


$ mkvirtualenv test
New python executable in test/bin/python
Installing
distribute......................................................................................................................
.......................................................................done.
Installing pip...............done.
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/preactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postactivate
virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/get_env_details
(test) $ which python
/home/ajdiaz/env/test/bin/python
                                                                   yep, these are hooks!
Unit testing
Unit testing: nose


class A(object):
  def __init__(self):
    self.value = "Some Value"

  def return_true(self):
    return True                 save it in a.py
  def raise_exc(self, val):
    raise KeyError(val)
Unit testing: nose

from a import A
from nose.tools import assert_equal
from nose.tools import assert_not_equal
from nose.tools import assert_raises
from nose.tools import raises

class TestA(object):
  @classmethod
  def setup_class(klass):
    """This method is run once for each class before any tests are run"""

  @classmethod
  def teardown_class(klass):
    """This method is run once for each class _after_ all tests are run"""

  def setUp(self):
    """This method is run once before _each_ test method is executed"""

  def teardown(self):
    """This method is run once after _each_ test method is executed"""



            .... continue ....
Unit testing: nose

def test_init(self):
    a = A()
    assert_equal(a.value, "Some Value")
    assert_not_equal(a.value, "Incorrect Value")

 def test_return_true(self):
   a = A()
   assert_equal(a.return_true(), True)
   assert_not_equal(a.return_true(), False)

 def test_raise_exc(self):
   a = A()
   assert_raises(KeyError, a.raise_exc, "A value")

 @raises(KeyError)
 def test_raise_exc_with_decorator(self):
   a = A()
   a.raise_exc("A message")




                 save it in tests/testa.py
Unit testing: nose


$ nosetests -v tests/
Unit testing: nose


$ nosetests -v tests/


testa.TestA.test_init ... ok
testa.TestA.test_raise_exc ... ok
testa.TestA.test_raise_exc_with_decorator ... ok
testa.TestA.test_return_true ... ok

---------------------------------------------------------
Ran 4 tests in 0.002s

OK
Unit testing: Bonus: code coverage


$ pip install coverage

$ nosetests --with-coverage
....
Name Stmts Miss Cover Missing
-------------------------------------
a      8    0 100%
-------------------------------------
Ran 4 tests in 0.006s OK
Packaging Python Eggs
Python eggs: basic setup.py


    from setuptools import setup

setup(
  name = "example",
  version = "1.0",
  description = "An example package",
     author='Andres J. Diaz'
)
Python eggs: basic setup.py


from setuptools import setup, find_packages

setup(
  name = "example",
  version = "1.0",
  description = "An example package",
  author='Andres J. Diaz',
  packages=find_packages()
)
Python eggs: complex setup.py


import re

from setuptools import setup, find_packages
from os import path

def parse_requirements(file_name):
  requirements = []
  for line in open(file_name, 'r').read().split('n'):
     if re.match(r'(s*#)|(s*$)', line):
       continue
     if re.match(r's*-es+', line):
       requirements.append(re.sub(r's*-es+.*#egg=(.*)$', r'1', line))
     elif re.match(r's*-fs+', line):
       pass
     else:
       requirements.append(line)
  return requirements

        .... continue ....
Python eggs: complex setup.py


def parse_dependency_links(file_name):
  dependency_links = []
  for line in open(file_name, 'r').read().split('n'):
     if re.match(r's*-[ef]s+', line):
       dependency_links.append(re.sub(r's*-[ef]s+', '', line))
  return dependency_links


def get_file_contents(filename):
  fd = file(path.join(path.dirname(__file__), filename), "r")
  content = fd.read()
  fd.close()
  return content




        .... continue ....
Python eggs: complex setup.py


setup(
  name = "mico",
  version = "0.1",
  description = "A monkey driven cloud management",
  long_description=get_file_contents("README.rst"),
  author='Andres J. Diaz',
  author_email='ajdiaz@connectical.com',
  url='http://ajdiaz.github.com/mico',
  packages=find_packages(),
  install_requires = parse_requirements('requirements.txt'),
  dependency_links = parse_dependency_links('requirements.txt'),
  entry_points={
     'console_scripts': [
         'mico = mico.scripts.cmdline:main',
     ]
  },
  classifiers=[
       'Development Status :: 4 - Beta',
       'Intended Audience :: Developers',
       'License :: OSI Approved :: GNU General Public License (GPL)',
       'Operating System :: OS Independent',
       'Programming Language :: Python',
  ],
)
Python eggs: complex setup.py


setup(
  name = "mico",
  version = "0.1",
  description = "A monkey driven cloud management",
  long_description=get_file_contents("README.rst"),
  author='Andres J. Diaz',
  author_email='ajdiaz@connectical.com',
  url='http://ajdiaz.github.com/mico',
  packages=find_packages(),
  install_requires = parse_requirements('requirements.txt'),
  dependency_links = parse_dependency_links('requirements.txt'),
  entry_points={
     'console_scripts': [
         'mico = mico.scripts.cmdline:main',
     ]
  },
  classifiers=[
       'Development Status :: 4 - Beta',
       'Intended Audience :: Developers',
       'License :: OSI Approved :: GNU General Public License (GPL)',
       'Operating System :: OS Independent',
       'Programming Language :: Python',
  ],
)
Applauses & questions
     Not necessarily in that order.

More Related Content

PDF
Puppet Module Reusability - What I Learned from Shipping to the Forge
PPTX
AssertJ quick introduction
PDF
PuppetCamp SEA 1 - Use of Puppet
PDF
The Ring programming language version 1.10 book - Part 92 of 212
PDF
Beginning PHPUnit
PDF
Oliver hookins puppetcamp2011
PDF
Puppet modules for Fun and Profit
PDF
Programming with ZooKeeper - A basic tutorial
Puppet Module Reusability - What I Learned from Shipping to the Forge
AssertJ quick introduction
PuppetCamp SEA 1 - Use of Puppet
The Ring programming language version 1.10 book - Part 92 of 212
Beginning PHPUnit
Oliver hookins puppetcamp2011
Puppet modules for Fun and Profit
Programming with ZooKeeper - A basic tutorial

What's hot (20)

PDF
Workshop quality assurance for php projects - ZendCon 2013
PDF
Py.test
PDF
Puppet: What _not_ to do
PDF
Let's read code: python-requests library
PPTX
PDF
UA testing with Selenium and PHPUnit - PFCongres 2013
PDF
Let's read code: the python-requests library
KEY
dotCloud and go
KEY
Django’s nasal passage
KEY
Python在豆瓣的应用
PDF
Java设置环境变量
PDF
Voxxed Days Vilnius 2015 - Having fun with Javassist
PDF
Hacking Mac OSX Cocoa API from Perl
PDF
Pytest: escreva menos, teste mais
PDF
#SPUG - Legacy applications
PDF
Puppet Continuous Integration with PE and GitLab
PDF
Google I/O 2021 Recap
PDF
Memory Manglement in Raku
PDF
Non stop random2b
PDF
EuroPython 2015 - Decorators demystified
Workshop quality assurance for php projects - ZendCon 2013
Py.test
Puppet: What _not_ to do
Let's read code: python-requests library
UA testing with Selenium and PHPUnit - PFCongres 2013
Let's read code: the python-requests library
dotCloud and go
Django’s nasal passage
Python在豆瓣的应用
Java设置环境变量
Voxxed Days Vilnius 2015 - Having fun with Javassist
Hacking Mac OSX Cocoa API from Perl
Pytest: escreva menos, teste mais
#SPUG - Legacy applications
Puppet Continuous Integration with PE and GitLab
Google I/O 2021 Recap
Memory Manglement in Raku
Non stop random2b
EuroPython 2015 - Decorators demystified
Ad

Viewers also liked (20)

PDF
Mico: A monkey in the cloud
PDF
Python speleology
PDF
We Buy Cheese in a Cheese Shop
PPTX
Python, Development Environment for Windows
PDF
Python Recipes for django girls seoul
KEY
Overview of Testing Talks at Pycon
ODP
Authentication & Authorization in ASPdotNet MVC
ODP
Rabbitmq & Postgresql
PDF
PyClab.__init__(self)
PDF
NoSql Day - Chiusura
PDF
2 × 3 = 6
PDF
PythonBrasil[8] closing
PDF
Django - The Web framework for perfectionists with deadlines
PPT
Load testing
PDF
The Django Book, Chapter 16: django.contrib
PDF
Django - The Web framework for perfectionists with deadlines
PPT
Django-Queryset
PDF
Bottle - Python Web Microframework
PDF
2007 - 应用系统脆弱性概论
PPT
Digesting jQuery
Mico: A monkey in the cloud
Python speleology
We Buy Cheese in a Cheese Shop
Python, Development Environment for Windows
Python Recipes for django girls seoul
Overview of Testing Talks at Pycon
Authentication & Authorization in ASPdotNet MVC
Rabbitmq & Postgresql
PyClab.__init__(self)
NoSql Day - Chiusura
2 × 3 = 6
PythonBrasil[8] closing
Django - The Web framework for perfectionists with deadlines
Load testing
The Django Book, Chapter 16: django.contrib
Django - The Web framework for perfectionists with deadlines
Django-Queryset
Bottle - Python Web Microframework
2007 - 应用系统脆弱性概论
Digesting jQuery
Ad

Similar to Isolated development in python (20)

PDF
PyCon 2013 : Scripting to PyPi to GitHub and More
PPTX
How to deliver a Python project
PDF
Princeton RSE: Building Python Packages (+binary)
PDF
Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017
PDF
Py Day Mallorca - Pipenv - Python Dev Workflow for Humans
PPTX
Complete python toolbox for modern developers
PDF
Pipfile, pipenv, pip… what?!
PDF
stackconf 2025 | Snakes are my new favourite by Felix Frank.pdf
ODP
Learn python
ODP
Python-specific packaging
PDF
Pyhton-1a-Basics.pdf
PDF
PyCon Taiwan 2013 Tutorial
PDF
Pipenv python dev workflow for humans
PDF
Effectively using Open Source with conda
PDF
Tools That Help You Write Better Code - 2025 Princeton Software Engineering S...
KEY
Python environments
PDF
Virtualenv
ODP
5 minute intro to virtualenv
PPTX
PyCourse - Self driving python course
PDF
How to write a well-behaved Python command line application
PyCon 2013 : Scripting to PyPi to GitHub and More
How to deliver a Python project
Princeton RSE: Building Python Packages (+binary)
Christian Strappazzon - Presentazione Python Milano - Codemotion Milano 2017
Py Day Mallorca - Pipenv - Python Dev Workflow for Humans
Complete python toolbox for modern developers
Pipfile, pipenv, pip… what?!
stackconf 2025 | Snakes are my new favourite by Felix Frank.pdf
Learn python
Python-specific packaging
Pyhton-1a-Basics.pdf
PyCon Taiwan 2013 Tutorial
Pipenv python dev workflow for humans
Effectively using Open Source with conda
Tools That Help You Write Better Code - 2025 Princeton Software Engineering S...
Python environments
Virtualenv
5 minute intro to virtualenv
PyCourse - Self driving python course
How to write a well-behaved Python command line application

Recently uploaded (20)

PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Electronic commerce courselecture one. Pdf
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
A Presentation on Artificial Intelligence
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
KodekX | Application Modernization Development
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Modernizing your data center with Dell and AMD
PDF
Spectral efficient network and resource selection model in 5G networks
Review of recent advances in non-invasive hemoglobin estimation
Understanding_Digital_Forensics_Presentation.pptx
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Electronic commerce courselecture one. Pdf
NewMind AI Monthly Chronicles - July 2025
A Presentation on Artificial Intelligence
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Advanced methodologies resolving dimensionality complications for autism neur...
KodekX | Application Modernization Development
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Digital-Transformation-Roadmap-for-Companies.pptx
Mobile App Security Testing_ A Comprehensive Guide.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Building Integrated photovoltaic BIPV_UPV.pdf
Encapsulation_ Review paper, used for researhc scholars
Modernizing your data center with Dell and AMD
Spectral efficient network and resource selection model in 5G networks

Isolated development in python

  • 3. pip installer $ pip install <package>
  • 4. pip installer $ pip install <package> Download package from pypi.python.org
  • 5. pip installer $ pip install <package> Download package from pypi.python.org $ pip install <directory> $ pip install <tar.gz>
  • 6. pip installer $ pip install <gitrepo>
  • 7. pip installer $ pip install <gitrepo> GREAT!!
  • 8. pip installer $ pip install <gitrepo> GREAT!! $ pip install git+git://github.com/ajdiaz/mole $ pip install git+ssh://github.com/ajdiaz/mole $ pip install git+git://github.com/ajdiaz/mole@840d25 $ pip install git+git://github.com/ajdiaz/mole@devel-branch $ pip install git+git://....@devel-branch#egg=Mole
  • 9. pip installer $ pip freeze
  • 10. pip installer $ pip freeze Fabric==1.5.2 GitPython==0.3.2.RC1 Jinja2==2.6 Pygments==1.6 Sphinx==1.2b1 Create requirements.txt argparse==1.2.1 async==0.6.1 boto==2.7.0 cuisine==0.5.1 distribute==0.6.24 docutils==0.10 gitdb==0.5.4 mico==0 paramiko==1.9.0 pycrypto==2.6 smmap==0.8.2 wsgiref==0.1.2
  • 11. 2. Virtualenv: a jail for python
  • 12. Virtualenv: the python jail $ virtualenv --python=/usr/bin/python2.7 mynewenvironment
  • 13. Virtualenv: the python jail $ virtualenv --python=/usr/bin/python2.7 mynewenvironment OR EVEN BETTER
  • 14. Virtualenv: the python jail $ virtualenv --python=/usr/bin/python2.7 mynewenvironment OR EVEN BETTER $ mkvirtualenv --python=/usr/bin/python2.7 mynewenvironment
  • 15. Virtualenv: the python jail $ virtualenv --python=/usr/bin/python2.7 mynewenvironment OR EVEN BETTER $ mkvirtualenv --python=/usr/bin/python2.7 mynewenvironment mkvirtualenvwrapper
  • 17. Virtualenvwrapper $ mkvirtualenv test New python executable in test/bin/python Installing distribute...................................................................................................................... .......................................................................done. Installing pip...............done. virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/predeactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postdeactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/preactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/get_env_details (test) $
  • 18. Virtualenvwrapper $ mkvirtualenv test New python executable in test/bin/python Installing distribute...................................................................................................................... .......................................................................done. Installing pip...............done. virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/predeactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postdeactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/preactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/get_env_details (test) $ which python /home/ajdiaz/env/test/bin/python
  • 19. Virtualenvwrapper $ mkvirtualenv test New python executable in test/bin/python Installing distribute...................................................................................................................... .......................................................................done. Installing pip...............done. virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/predeactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postdeactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/preactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/postactivate virtualenvwrapper.user_scripts creating /home/ajdiaz/env/test/bin/get_env_details (test) $ which python /home/ajdiaz/env/test/bin/python yep, these are hooks!
  • 21. Unit testing: nose class A(object): def __init__(self): self.value = "Some Value" def return_true(self): return True save it in a.py def raise_exc(self, val): raise KeyError(val)
  • 22. Unit testing: nose from a import A from nose.tools import assert_equal from nose.tools import assert_not_equal from nose.tools import assert_raises from nose.tools import raises class TestA(object): @classmethod def setup_class(klass): """This method is run once for each class before any tests are run""" @classmethod def teardown_class(klass): """This method is run once for each class _after_ all tests are run""" def setUp(self): """This method is run once before _each_ test method is executed""" def teardown(self): """This method is run once after _each_ test method is executed""" .... continue ....
  • 23. Unit testing: nose def test_init(self): a = A() assert_equal(a.value, "Some Value") assert_not_equal(a.value, "Incorrect Value") def test_return_true(self): a = A() assert_equal(a.return_true(), True) assert_not_equal(a.return_true(), False) def test_raise_exc(self): a = A() assert_raises(KeyError, a.raise_exc, "A value") @raises(KeyError) def test_raise_exc_with_decorator(self): a = A() a.raise_exc("A message") save it in tests/testa.py
  • 24. Unit testing: nose $ nosetests -v tests/
  • 25. Unit testing: nose $ nosetests -v tests/ testa.TestA.test_init ... ok testa.TestA.test_raise_exc ... ok testa.TestA.test_raise_exc_with_decorator ... ok testa.TestA.test_return_true ... ok --------------------------------------------------------- Ran 4 tests in 0.002s OK
  • 26. Unit testing: Bonus: code coverage $ pip install coverage $ nosetests --with-coverage .... Name Stmts Miss Cover Missing ------------------------------------- a 8 0 100% ------------------------------------- Ran 4 tests in 0.006s OK
  • 28. Python eggs: basic setup.py from setuptools import setup setup( name = "example", version = "1.0", description = "An example package", author='Andres J. Diaz' )
  • 29. Python eggs: basic setup.py from setuptools import setup, find_packages setup( name = "example", version = "1.0", description = "An example package", author='Andres J. Diaz', packages=find_packages() )
  • 30. Python eggs: complex setup.py import re from setuptools import setup, find_packages from os import path def parse_requirements(file_name): requirements = [] for line in open(file_name, 'r').read().split('n'): if re.match(r'(s*#)|(s*$)', line): continue if re.match(r's*-es+', line): requirements.append(re.sub(r's*-es+.*#egg=(.*)$', r'1', line)) elif re.match(r's*-fs+', line): pass else: requirements.append(line) return requirements .... continue ....
  • 31. Python eggs: complex setup.py def parse_dependency_links(file_name): dependency_links = [] for line in open(file_name, 'r').read().split('n'): if re.match(r's*-[ef]s+', line): dependency_links.append(re.sub(r's*-[ef]s+', '', line)) return dependency_links def get_file_contents(filename): fd = file(path.join(path.dirname(__file__), filename), "r") content = fd.read() fd.close() return content .... continue ....
  • 32. Python eggs: complex setup.py setup( name = "mico", version = "0.1", description = "A monkey driven cloud management", long_description=get_file_contents("README.rst"), author='Andres J. Diaz', author_email='ajdiaz@connectical.com', url='http://ajdiaz.github.com/mico', packages=find_packages(), install_requires = parse_requirements('requirements.txt'), dependency_links = parse_dependency_links('requirements.txt'), entry_points={ 'console_scripts': [ 'mico = mico.scripts.cmdline:main', ] }, classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', 'License :: OSI Approved :: GNU General Public License (GPL)', 'Operating System :: OS Independent', 'Programming Language :: Python', ], )
  • 33. Python eggs: complex setup.py setup( name = "mico", version = "0.1", description = "A monkey driven cloud management", long_description=get_file_contents("README.rst"), author='Andres J. Diaz', author_email='ajdiaz@connectical.com', url='http://ajdiaz.github.com/mico', packages=find_packages(), install_requires = parse_requirements('requirements.txt'), dependency_links = parse_dependency_links('requirements.txt'), entry_points={ 'console_scripts': [ 'mico = mico.scripts.cmdline:main', ] }, classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', 'License :: OSI Approved :: GNU General Public License (GPL)', 'Operating System :: OS Independent', 'Programming Language :: Python', ], )
  • 34. Applauses & questions Not necessarily in that order.