def __init__(self, arg, options): if is_archive_file(arg): name = path_to_fileurl(arg) elif os.path.isdir(arg): name = path_to_fileurl(arg) else: name = arg if is_url(name): self.download_url = name filename = Link(self.download_url).filename pkg = Package(filename, options.alias) else: pkg = Package(name, options.alias) self.download_url = get_python_version_url(pkg.version) if not self.download_url: logger.error("Unknown python version: `%s`" % pkg.name) raise UnknownVersionException filename = Link(self.download_url).filename self.pkg = pkg self.install_dir = os.path.join(PATH_PYTHONS, pkg.name) self.build_dir = os.path.join(PATH_BUILD, pkg.name) self.download_file = os.path.join(PATH_DISTS, filename) self.options = options self.logfile = os.path.join(PATH_LOG, 'build.log') self.patches = [] if Version(self.pkg.version) >= '3.1': self.configure_options = ['--with-computed-gotos'] else: self.configure_options = []
def install_setuptools(self): options = self.options pkgname = self.pkg.name if options.no_setuptools: logger.log("Skip installation of setuptools.") return download_url = DISTRIBUTE_SETUP_DLSITE filename = Link(download_url).filename download_file = os.path.join(PATH_DISTS, filename) dl = Downloader() dl.download(filename, download_url, download_file) install_dir = os.path.join(PATH_PYTHONS, pkgname) path_python = os.path.join(install_dir, "bin", "python") try: s = Subprocess(log=self.logfile, cwd=PATH_DISTS, verbose=self.options.verbose) logger.info("Installing distribute into %s" % install_dir) s.check_call([path_python, filename]) # installing pip easy_install = os.path.join(install_dir, 'bin', 'easy_install') if os.path.isfile(easy_install): logger.info("Installing pip into %s" % install_dir) s.check_call([easy_install, 'pip']) except: logger.error( "Failed to install setuptools. See %s/build.log to see why." % (ROOT)) logger.log("Skip installation of setuptools.")
def run_command(self, options, args): if options.python: pkgname = Package(options.python).name else: pkgname = get_using_python_pkgname() if not is_installed(pkgname): logger.error('`%s` is not installed.' % pkgname) sys.exit(1) logger.info('Using %s' % pkgname) # build a path python = os.path.join(PATH_PYTHONS, pkgname, 'bin', 'python') # Download bootstrap.py download_url = BOOTSTRAP_DLSITE filename = Link(download_url).filename bootstrap = os.path.join(os.getcwd(), filename) # fetching into current directory try: d = Downloader() d.download(filename, download_url, bootstrap) except: e = sys.exc_info()[1] logger.error("%s" % (e)) sys.exit(1) # call bootstrap.py if subprocess.call([python, bootstrap, '-d']): logger.error('Failed to bootstrap.') sys.exit(1) # call buildout subprocess.call(['./bin/buildout'])
def _update_pythonbrew(self, options, args): if options.master: version = 'master' elif options.develop: version = 'develop' else: version = get_stable_version() # check for version if not options.force and Version(version) <= VERSION: logger.info( "You are already running the installed latest version of pythonbrew." ) return download_url = get_pythonbrew_update_url(version) if not download_url: logger.error("`pythonbrew-%s` was not found in pypi." % version) sys.exit(1) headinfo = get_headerinfo_from_url(download_url) content_type = headinfo['content-type'] if not options.master and not options.develop: if not is_gzip(content_type, Link(download_url).filename): logger.error("content type should be gzip. content-type:`%s`" % content_type) sys.exit(1) filename = "pythonbrew-%s" % version distname = "%s.tgz" % filename download_file = os.path.join(PATH_DISTS, distname) try: d = Downloader() d.download(distname, download_url, download_file) except: logger.error("Failed to download. `%s`" % download_url) sys.exit(1) extract_dir = os.path.join(PATH_BUILD, filename) rm_r(extract_dir) if not extract_downloadfile(content_type, download_file, extract_dir): sys.exit(1) try: logger.info("Installing %s into %s" % (extract_dir, ROOT)) s = Subprocess() s.check_call([ sys.executable, os.path.join(extract_dir, 'pythonbrew_install.py'), '--upgrade' ]) except: logger.error("Failed to update pythonbrew.") sys.exit(1) logger.info("The pythonbrew has been updated.")
def _update_config(self, options, args): # config.cfg update # TODO: Automatically create for config.cfg download_url = PYTHONBREW_UPDATE_URL_CONFIG if not download_url: logger.error("Invalid download url in config.cfg. `%s`" % download_url) sys.exit(1) distname = Link(PYTHONBREW_UPDATE_URL_CONFIG).filename download_file = PATH_ETC_CONFIG try: d = Downloader() d.download(distname, download_url, download_file) except: logger.error("Failed to download. `%s`" % download_url) sys.exit(1) logger.log("The config.cfg has been updated.")
def download_and_extract(self): if is_file(self.download_url): path = fileurl_to_path(self.download_url) if os.path.isdir(path): logger.info('Copying %s into %s' % (path, self.build_dir)) shutil.copytree(path, self.build_dir) return if os.path.isfile(self.download_file): logger.info("Use the previously fetched %s" % (self.download_file)) else: base_url = Link(self.download_url).base_url try: dl = Downloader() dl.download(base_url, self.download_url, self.download_file) except: unlink(self.download_file) logger.error("Failed to download.\n%s" % (sys.exc_info()[1])) sys.exit(1) # extracting if not extract_downloadfile(self.content_type, self.download_file, self.build_dir): sys.exit(1)