generate single file script "pypi-server-standalone.py".

This commit is contained in:
Ralf Schmitt 2011-08-01 22:39:16 +02:00
parent c9484e177d
commit f37dc30f3a
4 changed files with 91 additions and 0 deletions

1
.gitignore vendored
View File

@ -18,3 +18,4 @@ __pycache__/
/dist/
/MANIFEST
/README.html
/pypi-server-standalone.py

View File

@ -1,7 +1,9 @@
include .gitignore
include MANIFEST.in
include README.rst
include gen-standalone.py
include pypi-server
include pypi-server-in.py
include pypiserver/__init__.py
include pypiserver/__main__.py
include pypiserver/bottle.py

36
gen-standalone.py Executable file
View File

@ -0,0 +1,36 @@
#! /usr/bin/env python
"""generate a single file pypi-server script"""
import os, zlib, cPickle, base64, glob
def get_version():
d = {}
try:
execfile("pypiserver/__init__.py", d, d)
except (ImportError, RuntimeError):
pass
return d["__version__"]
def main():
name2src = {}
for f in glob.glob("pypiserver/*.py"):
k = f.replace('/', '.')[:-3]
name2src[k] = open(f).read()
data = cPickle.dumps(name2src, 2)
data = zlib.compress(data, 9)
data = base64.encodestring(data)
data = '%s' % (data)
script = open("pypi-server-in.py").read()
script = script.replace("@VERSION@", get_version())
script = script.replace('@SOURCES@', data)
dst = "pypi-server-standalone.py"
open(dst, "w").write(script)
os.chmod(dst, 0755)
print "created", dst
if __name__=='__main__':
main()

52
pypi-server-in.py Normal file
View File

@ -0,0 +1,52 @@
#! /usr/bin/env python
"""standalone pypi-server, version @VERSION@"""
sources = """
@SOURCES@"""
import sys, base64, zlib, cPickle
sources = cPickle.loads(zlib.decompress(base64.decodestring(sources)))
class DictImporter(object):
sources = sources
def find_module(self, fullname, path=None):
if fullname in self.sources:
return self
if fullname + '.__init__' in self.sources:
return self
return None
def load_module(self, fullname):
try:
s = self.sources[fullname]
is_pkg = False
except KeyError:
s = self.sources[fullname + '.__init__']
is_pkg = True
co = compile(s, fullname, 'exec')
module = sys.modules.setdefault(fullname, type(sys)(fullname))
module.__file__ = __file__
module.__loader__ = self
if is_pkg:
module.__path__ = [fullname]
exec co in module.__dict__
return sys.modules[fullname]
def get_source(self, name):
res = self.sources.get(name)
if res is None:
res = self.sources.get(name + '.__init__')
return res
importer = DictImporter()
sys.meta_path.append(importer)
if __name__ == "__main__":
from pypiserver.core import main
main()