mirror of
https://github.com/kennethreitz-archive/pyinstaller.git
synced 2026-06-05 15:40:17 +00:00
4e9060b6db
git-svn-id: http://svn.pyinstaller.org/trunk@852 8dd32b29-ccff-0310-8a9a-9233e24343b1
91 lines
3.5 KiB
Python
91 lines
3.5 KiB
Python
#!/usr/bin/env python
|
|
|
|
import os
|
|
|
|
def exec_statement(stat):
|
|
"""Executes a Python statement in an externally spawned interpreter, and
|
|
returns anything that was emitted in the standard output as a single string.
|
|
"""
|
|
|
|
import os, tempfile, sys
|
|
|
|
fnm = tempfile.mktemp()
|
|
exe = sys.executable
|
|
|
|
# Using "echo on" as a workaround for a bug in NT4 shell
|
|
if os.name == "nt":
|
|
cmd = 'echo on && "%s" -c "%s" > "%s"' % (exe, stat, fnm)
|
|
else:
|
|
cmd = '"%s" -c "%s" > "%s"' % (exe, stat, fnm)
|
|
|
|
# Prepend PYTHONPATH with pathex
|
|
pp = os.pathsep.join(sys.pathex)
|
|
old_pp = os.environ.get('PYTHONPATH', '')
|
|
if old_pp:
|
|
pp = os.pathsep.join([pp, old_pp])
|
|
os.environ["PYTHONPATH"] = pp
|
|
try:
|
|
# Actually execute the statement
|
|
os.system(cmd)
|
|
finally:
|
|
if old_pp:
|
|
os.environ["PYTHONPATH"] = old_pp
|
|
else:
|
|
del os.environ["PYTHONPATH"]
|
|
|
|
txt = open(fnm, 'r').read()[:-1]
|
|
os.remove(fnm)
|
|
return txt
|
|
|
|
def qt4_plugins_dir():
|
|
import os
|
|
qt4_plugin_dirs = eval(exec_statement("from PyQt4.QtCore import QCoreApplication; app=QCoreApplication([]); print map(unicode,app.libraryPaths())"))
|
|
if not qt4_plugin_dirs:
|
|
print "E: Cannot find PyQt4 plugin directories"
|
|
return ""
|
|
for d in qt4_plugin_dirs:
|
|
if os.path.isdir(d):
|
|
return str(d) # must be 8-bit chars for one-file builds
|
|
print "E: Cannot find existing PyQt4 plugin directory"
|
|
return ""
|
|
def qt4_phonon_plugins_dir():
|
|
import os
|
|
qt4_plugin_dirs = eval(exec_statement("from PyQt4.QtGui import QApplication; app=QApplication([]); app.setApplicationName('pyinstaller'); from PyQt4.phonon import Phonon; v=Phonon.VideoPlayer(Phonon.VideoCategory); print map(unicode,app.libraryPaths())"))
|
|
if not qt4_plugin_dirs:
|
|
print "E: Cannot find PyQt4 phonon plugin directories"
|
|
return ""
|
|
for d in qt4_plugin_dirs:
|
|
if os.path.isdir(d):
|
|
return str(d) # must be 8-bit chars for one-file builds
|
|
print "E: Cannot find existing PyQt4 phonon plugin directory"
|
|
return ""
|
|
def babel_localedata_dir():
|
|
return exec_statement("import babel.localedata; print babel.localedata._dirname")
|
|
def mpl_data_dir():
|
|
return exec_statement("import matplotlib; print matplotlib._get_data_path()")
|
|
def qwt_numpy_support():
|
|
return eval(exec_statement("from PyQt4 import Qwt5; print hasattr(Qwt5, 'toNumpy')"))
|
|
def qwt_numeric_support():
|
|
return eval(exec_statement("from PyQt4 import Qwt5; print hasattr(Qwt5, 'toNumeric')"))
|
|
def qwt_numarray_support():
|
|
return eval(exec_statement("from PyQt4 import Qwt5; print hasattr(Qwt5, 'toNumarray')"))
|
|
|
|
def django_dottedstring_imports(django_root_dir):
|
|
package_name = os.path.basename(django_root_dir)
|
|
os.environ["DJANGO_SETTINGS_MODULE"] = "%s.settings" %package_name
|
|
return eval(exec_statement("execfile(r'%s')" %os.path.join(os.path.dirname(__file__), "django-import-finder.py")))
|
|
|
|
def find_django_root(dir):
|
|
entities = os.listdir(dir)
|
|
if "manage.py" in entities and "settings.py" in entities and "urls.py" in entities:
|
|
return [dir]
|
|
else:
|
|
django_root_directories = []
|
|
for entity in entities:
|
|
path_to_analyze = os.path.join(dir, entity)
|
|
if os.path.isdir(path_to_analyze):
|
|
dir_entities = os.listdir(path_to_analyze)
|
|
if "manage.py" in dir_entities and "settings.py" in dir_entities and "urls.py" in dir_entities:
|
|
django_root_directories.append(path_to_analyze)
|
|
return django_root_directories
|