This is a pre-production deployment of Warehouse, however changes made here WILL affect the production instance of PyPI.
Latest Version Dependencies status unknown Test status unknown Test coverage unknown
Project Description

bootstrap_env

Experimental project to create a complete self contained virtualenv bootstrap file. See: packaging-problems issues 55

Fork and contribute! ;)

Compatible Python Versions (see also .travis.yml):

  • 2.7, 3.4, 3.5
  • PyPy (Python v2 and v3)
travis-ci.org/jedie/bootstrap_env
ci.appveyor.com/project/jedie/bootstrap-env
coveralls.io/r/jedie/bootstrap_env
landscape.io/github/jedie/bootstrap_env/master
requires.io/github/jedie/bootstrap_env/requirements/

info

Since virtualenv v1.10 you a virtualenv bootstrap file is not runnable without the pip and setuptools wheel files. There must be created a virtualenv_support with the wheels.

e.g.:

/bootstrap.py
/virtualenv_support/
        pip-1.5.6-py2.py3-none-any.whl
        setuptools-3.6-py2.py3-none-any.whl

With this project this is not needed. The current solution embed get_pip.py into the bootstrap file and call it after env creation.

There are also some helpers to parse pip requirement files and install packages after virtualenv creation. Look into “boot bootstrap_env” project below.

the example

There is a simple example.

To test it, create first the bootstrap file by running create_example.py for it: e.g.:

/path/to/bootstrap-env$ python example_bootstrap/create_example.py

Generate bootstrap file: '/path/to/bootstrap-env/boot_example_env.py'...

Read code from: '.../src/bootstrap-env/example_bootstrap/extend_parser.py'...
Read code from: '.../src/bootstrap-env/example_bootstrap/adjust_options.py'...
Read code from: '.../src/bootstrap-env/example_bootstrap/after_install.py'...
Read code from: '.../src/bootstrap-env/bootstrap_env/bootstrap_install_pip.py'...
Request: 'https://raw.githubusercontent.com/pypa/pip/22baf0ca29325e848010c44a0fec0db64e8d1edb/contrib/get-pip.py'...
Request: 'https://raw.githubusercontent.com/pypa/pip/master/contrib/get-pip.py'...
Requested content of 'get-pip.py' is up-to-date, ok.
get-pip.py SHA256: '51ef604ed2852f6b57b675ebefc4b807cffd2300bfc885761365988d19d227ad', ok.

'/path/to/bootstrap-env/boot_example_env.py' written.

After the first call, the requested get-pip.py file will be cached into the default temp and reused from there. So it is fast to generate it again:

/path/to/bootstrap-env$ python example_bootstrap/create_example.py

Generate bootstrap file: '/path/to/bootstrap-env/boot_example_env.py'...

Read code from: '.../src/bootstrap-env/example_bootstrap/extend_parser.py'...
Read code from: '.../src/bootstrap-env/example_bootstrap/adjust_options.py'...
Read code from: '.../src/bootstrap-env/example_bootstrap/after_install.py'...
Read code from: '.../src/bootstrap-env/bootstrap_env/bootstrap_install_pip.py'...
Use '/tmp/get-pip.py'
get-pip.py SHA256: '51ef604ed2852f6b57b675ebefc4b807cffd2300bfc885761365988d19d227ad', ok.

'/path/to/bootstrap-env/boot_example_env.py' written.

Running this looks like:

/path/to/bootstrap-env$ python boot_example_env.py ~/example_env

The additional example extend_parser() code is called.
The additional example adjust_options() code is called.

Using real prefix '/usr'
Path not in prefix '/home/jens/PyLucid_env/include/python3.4m' '/usr'
New python executable in /home/jens/example_env/bin/python
Install pip...
call '/home/jens/example_env/bin/python /home/jens/PyLucid_env/src/bootstrap-env/boot_example_env.py --install-pip /home/jens/example_env'
install pip from self contained 'get_pip.py'
Collecting pip
  Using cached pip-7.0.3-py2.py3-none-any.whl
Collecting setuptools
  Using cached setuptools-17.0-py2.py3-none-any.whl
Collecting wheel
  Using cached wheel-0.24.0-py2.py3-none-any.whl
Installing collected packages: pip, setuptools, wheel
Successfully installed pip-7.0.3 setuptools-17.0 wheel-0.24.0

The additional example after_install() code is called.

The example hook code stored separated files in example_bootstrap directory looks like this:

def extend_parser(parser):
    # --- CUT here ---
    sys.stdout.write("\nThe additional example extend_parser() code is called.\n")
def adjust_options(options, args):
    # --- CUT here ---
    sys.stdout.write("The additional example adjust_options() code is called.\n\n")
def after_install(options, home_dir):
    # --- CUT here ---
    sys.stdout.write("\nThe additional example after_install() code is called.\n\n")

usage

To create you own bootstrap file, is easy. Just copy the example or boot_bootstrap_env code and change it for your needs.

Projects that use bootstrap_env are:

Missing project? Do you use it? Just send me a mail: bootstrap_env AT jensdiemer DOT de or use IRC/Jabber (see below)

boot bootstrap_env

To create a fresh virtualenv with boot.py do the following:

# Download 'boot_bootstrap_env.py' from github:
/home/FooBar$ wget https://raw.githubusercontent.com/jedie/bootstrap_env/master/bootstrap_env/boot.py

# Create virtualenv and use read-only GIT:
/home/FooBar$ python3 boot.py ~/my_bootstrap_env --install_type git_readonly

The created virtualenv is under ~/my_bootstrap_env/ ;)

If you would like to use PyPi packages do this:

# Create virtualenv and use read-only GIT:
/home/FooBar$ python3 boot.py ~/my_bootstrap_env --install_type pypi

The boot.py will be created by create_boot.py this is stored here: /bootstrap_env/boot_bootstrap_env/

This also work under Windows. e.g:

C:\> C:\Python34\python.exe d:\downloads\boot.py --install_type=pypi d:\my_bootstrap_env

There is also a maybe helpful batch file: bootstrap_env/boot.cmd

Request get_pip.py notes

The script file bootstrap_env/create_bootstrap.py will request get_pip.py from https://github.com/pypa/pip/blob/develop/contrib/get-pip.py It verify the content via SHA256 hash. This hash is hardcoded in create_bootstrap.py You will get a warning if a newer get_pip.py was commited. Looks like this:

Request: 'https://raw.githubusercontent.com/pypa/get-pip/8481822bfacd435888cab6a0103fb041a2634bfb/get-pip.py'...
Request: 'https://bootstrap.pypa.io/get-pip.py'...
WARNING: 'get-pip.py' master changed! Maybe a new version was commited?
Please check:
    https://github.com/pypa/get-pip/commits/master/get-pip.py
And report here:
    https://github.com/jedie/bootstrap_env/issues
get-pip.py SHA256: 'f982ad4fc7baa8a6b03d000df349ac9c27d8a695f12d955225e9c25ff1897934', ok.

'../boot_bootstrap_env.py' written.

backward incompatible changes

v0.6.3 -> v0.6.4

get-pip and virtualenv drop support for Python 3.2. So bootstrap_env v0.6.4 will not work with Python 3.2 Note: There exist a separate get-pip version for Python 3.2, here: https://github.com/pypa/get-pip/tree/master/3.2

v0.4 -> v0.5

bootstrap_env.**create_bootstrap** was renamed to: bootstrap_env.**generate_bootstrap**

e.g. new:

from bootstrap_env.generate_bootstrap import generate_bootstrap

if __name__ == '__main__':
    generate_bootstrap(
        #...
    )

old:

from bootstrap_env.create_bootstrap import generate_bootstrap

if __name__ == '__main__':
    generate_bootstrap(
        #...
    )

History

  • v0.6.4 - 30.Nov.2016:

    • Note: This pip version doesn’t support pypy3. See notes above
    • Update to get-pip v9.0.1
  • v0.6.3 - 12.Sep.2016:

    • update for virtualenv v15.0.3
  • v0.6.2 - 20.07.2016:

  • v0.6.1 - 04.04.2016:

  • v0.6.0 - 26.12.2015:

    • Remove old v0.4 API warnings
  • v0.5.4 - 26.07.2015:

    • Bugfix for PyPy2 under Windows by a more flexible solution to find ‘bin’ and executeables.
  • v0.5.3 - 24.07.2015 - update to pip 7.1.2

  • v0.5.2 - 24.07.2015 - Made add_extend_parser, add_adjust_options and add_after_install optional in generate_bootstrap()

  • v0.5.1 - 18.07.2015 - Update to pip 7.1.0

  • v0.5.0 - 05.06.2015 - Add unittests, refactor sourcecode layout. (Please notice ‘backward incompatible changes’ above!)

  • v0.4.6 - 03.06.2015 - Update to pip 7.0.3

  • v0.4.5 - 26.05.2015 - Update to pip 7.0.1, cut filepath in generated boot file comments

  • v0.4.4 - 14.04.2015 - Update to pip 6.1.1 (upload again as v0.4.4 with wheel, too.)

  • v0.4.2 - 07.02.2015 - Update to pip 6.0.8

  • v0.4.1 - 29.01.2015 - Update for pip 6.0.7 and pin requested url.

  • v0.4.0 - 28.01.2015 - Updates for pip 6.0.6 changes

  • v0.3.5 - 28.01.2015 - Update SHA256 for get-pip.py v6.0.6

  • v0.3.4 - 14.11.2014 - Bugfix: if os.environ['SYSTEMROOT'] not exists.

  • v0.3.3 - 14.11.2014 - Add version number into generated bootstrap file.

  • v0.3.2 - 14.11.2014 - Add ‘boot bootstrap_env’ and bugfixes for running under Windows.

  • v0.3.1 - 14.11.2014 - Bugfix for “error: no such option:” while pip install, if own optional options are used.

  • v0.3.0 - 13.11.2014 - typo: rename all bootstrip to bootstrap ;)

  • v0.2.0 - 09.10.2014 - add prefix and suffix argument to generate_bootstrap()

  • v0.1.0 - 09.10.2014 - initial release

Release History

Release History

0.6.4

This version

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.6.3

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.6.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.6.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.4

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.3

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.5.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4.6

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4.5

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4.4

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.4.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.5

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.4

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.3

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.2

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.1

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.3.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

0.1.0

History Node

TODO: Figure out how to actually get changelog content.

Changelog content for this version goes here.

Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Show More

Download Files

Download Files

TODO: Brief introduction on what you do with files - including link to relevant help section.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
bootstrap_env-0.6.4-py2.py3-none-any.whl (1.4 MB) Copy SHA256 Checksum SHA256 py2.py3 Wheel Nov 30, 2016
bootstrap_env-0.6.4-py3.5.egg (1.3 MB) Copy SHA256 Checksum SHA256 3.5 Egg Nov 30, 2016
bootstrap_env-0.6.4.tar.gz (1.4 MB) Copy SHA256 Checksum SHA256 Source Nov 30, 2016

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting