Created
January 29, 2014 15:01
-
-
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`
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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