Skip to content

Instantly share code, notes, and snippets.

@ulope
Created January 29, 2014 15:01
Show Gist options
  • Save ulope/8689812 to your computer and use it in GitHub Desktop.
Save ulope/8689812 to your computer and use it in GitHub Desktop.
Fabric task to create requirements from setup.py's `install_requires` and (if existing) `dependency_links`
# requires that the `setup()` call in setup.py is guarded with the if __name__ idiom
import imp
import os
from rex import rex # python-rex on PyPI
@task()
def update_req():
setup = imp.load_source("setup", "setup.py")
dep_re = rex("/^(.*?)#egg=(?P<package_name>.*)$/")
req_re = rex("/^(?P<package_name>.*?)(?:==|<|<=|>|>=)(?P<version>.*?)$/")
foreign_packages = dict(
(dep['package_name'], dep[0])
for dep
in (dep_re == dep for dep in getattr(setup, 'dependency_links', []))
)
with open("requirements.txt.new", "w") as out:
for req in setup.requirements:
parsed = (req_re == req)
package_name = parsed['package_name']
out.write(foreign_packages.get(package_name, req) + "\n")
os.rename("requirements.txt.new", "requirements.txt")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment