Python sys 模块,_MEIPASS 实例源码
我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用sys._MEIPASS。
def start_gui(self):
'''
@summary: Initialises and launches the ransomware GUI screen
'''
# Get Crypter start_time
start_time = self.get_start_time()
app = wx.App()
# TODO Update this to new path and place in __init__
#sys._MEIPASS = "..\\build\\images"
crypter_gui = Gui.Gui(
image_path=sys._MEIPASS,
start_time=start_time,
decrypter=self,
config=self.__config)
crypter_gui.Show()
app.MainLoop()
def readDiscoveryFile(api_version):
disc_filename = u'%s.json' % (api_version)
disc_file = os.path.join(GM.Globals[GM.GAM_PATH], disc_filename)
if hasattr(sys, u'_MEIPASS'):
pyinstaller_disc_file = os.path.join(sys._MEIPASS, disc_filename)
else:
pyinstaller_disc_file = None
if os.path.isfile(disc_file):
json_string = readFile(disc_file, continueOnError=True, displayError=True)
elif pyinstaller_disc_file:
json_string = readFile(pyinstaller_disc_file, continueOnError=True, displayError=True)
else:
json_string = None
if not json_string:
invalidDiscoveryJsonExit(disc_file)
try:
discovery = json.loads(json_string)
return (disc_file, discovery)
except ValueError:
invalidDiscoveryJsonExit(disc_file)
def initGDataObject(gdataObj, api):
if hasattr(sys, u'_MEIPASS') and not GM.Globals[GM.CACERTS_TXT]:
GM.Globals[GM.CACERTS_TXT] = os.path.join(sys._MEIPASS, u'httplib2', u'cacerts.txt')
os.environ['REQUESTS_CA_BUNDLE'] = GM.Globals[GM.CACERTS_TXT]
os.environ['DEFAULT_CA_BUNDLE_PATH'] = GM.Globals[GM.CACERTS_TXT]
_, _, api_version, cred_family = API.getVersion(api)
disc_file, discovery = readDiscoveryFile(api_version)
GM.Globals[GM.CURRENT_API_USER] = None
credentials = getClientCredentials(cred_family)
try:
GM.Globals[GM.CURRENT_API_SCOPES] = list(set(list(discovery[u'auth'][u'oauth2'][u'scopes'])).intersection(credentials.scopes))
except KeyError:
invalidDiscoveryJsonExit(disc_file)
if not GM.Globals[GM.CURRENT_API_SCOPES]:
systemErrorExit(NO_SCOPES_FOR_API_RC, Msg.NO_SCOPES_FOR_API.format(discovery.get(u'title', api_version)))
getGDataOAuthToken(gdataObj, credentials)
if GC.Values[GC.DEBUG_LEVEL] > 0:
gdataObj.debug = True
return gdataObj
def run():
app = QtWidgets.QApplication(sys.argv)
# Translates standard-buttons (Ok, Cancel) and mac menu bar to german
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
path = os.path.join(base_path, 'bin', 'qtbase_de.qm')
translator = QtCore.QTranslator()
translator.load(path)
app.installTranslator(translator)
window = MainWindow()
window.show()
app.exec_()
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
# Last character is stripped in C-loader. We have to add
# '/' or '\\' at the end.
os.putenv('_MEIPASS2', sys._MEIPASS + os.sep)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
def main():
# This is required so that app.quit can be invoked when the quickview
# is closed. If it is not present then the app does not exit. It is
# possibly a bug in PyQt or Qt.
global app
app = QtWidgets.QApplication(sys.argv)
quickview = QtQuick.QQuickView()
if getattr(sys, 'frozen', None):
basedir = sys._MEIPASS
else:
basedir = os.path.dirname(__file__)
# The app dir is in the default import path but we can't put the QtQuick
# import lib dirs there because of a name clash (on OSX) with the QtQuick
# dll.
print(("Qt5 Qml import paths: " \
+ unicode(quickview.engine().importPathList())))
quickview.setSource(QtCore.QUrl('qrc:/hello.qml'))
quickview.engine().quit.connect(app.quit)
quickview.show()
app.exec_()
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def GetResource(frozen_loc,resource_loc,resource_name):
''' Get resource by location and name. This will compensate for frozen or not.
args:
frozen_loc: location of resource when frozen
resource_loc: location of resource in package (not frozen)
resource_name: name of the file
returns:
location: The abs location
'''
location = None
if getattr(sys,'frozen',False):
location = os.path.join(sys._MEIPASS,frozen_loc)
location = os.path.join(location,resource_name)
location = os.path.abspath(location)
else:
location = os.path.abspath(
pkg_resources.resource_filename(
resource_loc,
resource_name
)
)
return location
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def readDiscoveryFile(api_version):
disc_filename = u'%s.json' % (api_version)
disc_file = os.path.join(GM.Globals[GM.GAM_PATH], disc_filename)
if hasattr(sys, u'_MEIPASS'):
pyinstaller_disc_file = os.path.join(sys._MEIPASS, disc_filename)
else:
pyinstaller_disc_file = None
if os.path.isfile(disc_file):
json_string = readFile(disc_file, continueOnError=True, displayError=True)
elif pyinstaller_disc_file:
json_string = readFile(pyinstaller_disc_file, continueOnError=True, displayError=True)
else:
json_string = None
if not json_string:
invalidDiscoveryJsonExit(disc_file)
try:
discovery = json.loads(json_string)
return (disc_file, discovery)
except ValueError:
invalidDiscoveryJsonExit(disc_file)
def initGDataObject(gdataObj, api):
if hasattr(sys, u'_MEIPASS') and not GM.Globals[GM.CACERTS_TXT]:
GM.Globals[GM.CACERTS_TXT] = os.path.join(sys._MEIPASS, u'httplib2', u'cacerts.txt')
os.environ['REQUESTS_CA_BUNDLE'] = GM.Globals[GM.CACERTS_TXT]
os.environ['DEFAULT_CA_BUNDLE_PATH'] = GM.Globals[GM.CACERTS_TXT]
_, _, api_version, cred_family = API.getVersion(api)
disc_file, discovery = readDiscoveryFile(api_version)
GM.Globals[GM.CURRENT_API_USER] = None
credentials = getClientCredentials(cred_family)
try:
GM.Globals[GM.CURRENT_API_SCOPES] = list(set(list(discovery[u'auth'][u'oauth2'][u'scopes'])).intersection(credentials.scopes))
except KeyError:
invalidDiscoveryJsonExit(disc_file)
if not GM.Globals[GM.CURRENT_API_SCOPES]:
systemErrorExit(NO_SCOPES_FOR_API_RC, Msg.NO_SCOPES_FOR_API.format(discovery.get(u'title', api_version)))
getGDataOAuthToken(gdataObj, credentials)
if GC.Values[GC.DEBUG_LEVEL] > 0:
gdataObj.debug = True
return gdataObj
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
# Last character is stripped in C-loader. We have to add
# '/' or '\\' at the end.
os.putenv('_MEIPASS2', sys._MEIPASS + os.sep)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
def main():
# This is required so that app.quit can be invoked when the quickview
# is closed. If it is not present then the app does not exit. It is
# possibly a bug in PyQt or Qt.
global app
app = QtWidgets.QApplication(sys.argv)
quickview = QtQuick.QQuickView()
if getattr(sys, 'frozen', None):
basedir = sys._MEIPASS
else:
basedir = os.path.dirname(__file__)
# The app dir is in the default import path but we can't put the QtQuick
# import lib dirs there because of a name clash (on OSX) with the QtQuick
# dll.
print(("Qt5 Qml import paths: " \
+ unicode(quickview.engine().importPathList())))
quickview.setSource(QtCore.QUrl('qrc:/hello.qml'))
quickview.engine().quit.connect(app.quit)
quickview.show()
app.exec_()
def __init__(self, *args, **kw):
if hasattr(sys, 'frozen'):
# We have to set original _MEIPASS2 value from sys._MEIPASS
# to get --onefile mode working.
os.putenv('_MEIPASS2', sys._MEIPASS)
try:
super(_Popen, self).__init__(*args, **kw)
finally:
if hasattr(sys, 'frozen'):
# On some platforms (e.g. AIX) 'os.unsetenv()' is not
# available. In those cases we cannot delete the variable
# but only set it to the empty string. The bootloader
# can handle this case.
if hasattr(os, 'unsetenv'):
os.unsetenv('_MEIPASS2')
else:
os.putenv('_MEIPASS2', '')
# Second override 'Popen' class with our modified version.
def get_version():
global osName
global bits
pf = platform.platform()
if 'Windows' in pf:
osName = 'w'
elif 'Linux' in pf:
osName = 'l'
else:
osName = 'osx'
bits, _ = platform.architecture()
if '64' in bits:
bits = '64'
else:
bits = '86'
if osName == 'osx':
bits = ''
# sys.path.append(sys._MEIPASS)
def setEnvironment(caller):
get_version()
global javaCallCommand
if caller == "GUI":
# try:
# base_path = sys._MEIPASS
# except:
# base_path = os.path.abspath(".")
cwd = os.getcwd()
if osName == 'w':
# full_path = os.path.join(base_path, "FuncParser.exe")
javaCallCommand = os.path.join(cwd, "FuncParser-opt.exe ")
elif osName == 'l' or osName == "osx":
# full_path = os.path.join(base_path, "FuncParser.jar")
# javaCallCommand = "java -Xmx1024m -jar " + full_path + " "
javaCallCommand = "java -Xmx1024m -jar \"" + os.path.join(cwd, "FuncParser-opt.jar") + "\" "
else:
if osName == 'w':
javaCallCommand = "FuncParser-opt.exe "
elif osName == 'l' or osName == "osx":
javaCallCommand = "java -Xmx1024m -jar \"FuncParser-opt.jar\" "
def resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
if hasattr(sys, '_MEIPASS'):
return path.join(sys._MEIPASS, relative_path)
return path.join(path.abspath("."), relative_path)
def resource_path(basePath, relativePath):
""" Get absolute path to resource, works for dev and for PyInstaller """
try:
# PyInstaller creates a temp folder and stores path in _MEIPASS
basePath = sys._MEIPASS
except Exception:
basePath = os.path.abspath(".")
finalPath = os.path.join(basePath, relativePath)
if sys.platform != 'win32':
finalPath = finalPath.replace('\\', '/')
return finalPath
def resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
try:
# PyInstaller creates a temp folder and stores path in _MEIPASS
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
def get_tools_path():
if getattr(sys, 'frozen', False):
# we are running in a bundle
bundle_dir = sys._MEIPASS
else:
# we are running in a normal Python environment
bundle_dir = os.path.dirname(os.path.abspath(__file__))
if sys.platform == "win32":
return os.path.join(bundle_dir, "tools", "win" + BITS)
elif sys.platform == "linux" or sys.platform == "linux2":
return os.path.join(bundle_dir, "tools", "linux" + BITS)
def get_path(path: str = None, override: bool = False) -> str:
if override:
if getattr(sys, 'frozen', False):
return os.path.join(sys._MEIPASS, path)
return os.path.join(QFileInfo(__file__).absolutePath(), path)
return ':assets/%s' % path
def get_path(path: str) -> str:
prefix = sys._MEIPASS if getattr(sys, 'frozen', False) else QFileInfo(__file__).absolutePath()
return os.path.join(prefix, path)
def __init__(self, token=TOKEN, remote=REMOTE_ADDR, client='stdout', username=None, feed=None, archiver=None,
fireball=False, no_fetch=False, verify_ssl=True, goback=False, skip_invalid=False, send_retries=5,
send_retries_wait=30):
self.logger = logging.getLogger(__name__)
self.client = None
if client != 'stdout':
plugin_path = os.path.join(os.path.dirname(__file__), 'client')
if getattr(sys, 'frozen', False):
plugin_path = os.path.join(sys._MEIPASS, 'csirtg_smrt', 'client')
self.client = load_plugin(plugin_path, client)
if not self.client:
raise RuntimeError("Unable to load plugin: {}".format(client))
self.client = self.client(remote=remote, token=token, username=username, feed=feed, fireball=fireball,
verify_ssl=verify_ssl)
self.archiver = archiver or NOOPArchiver()
self.fireball = fireball
self.no_fetch = no_fetch
self.goback = goback
self.skip_invalid = skip_invalid
self.verify_ssl = verify_ssl
self.last_cache = None
self.send_retries = send_retries
self.send_retries_wait = send_retries_wait
def load_parser(self, rule, feed, limit=None, data=None, filters=None):
if isinstance(rule, str):
rule = Rule(rule)
fetch = Fetcher(rule, feed, data=data, no_fetch=self.no_fetch, verify_ssl=self.verify_ssl, limit=limit)
self.last_cache = fetch.cache
parser_name = rule.feeds[feed].get('parser') or rule.parser or PARSER_DEFAULT
if not parser_name:
from csirtg_smrt.utils.zcontent import get_type
try:
parser_name = get_type(self.last_cache)
except Exception as e:
logger.error(e)
if not parser_name:
parser_name = PARSER_DEFAULT
plugin_path = os.path.join(os.path.dirname(__file__), 'parser')
if getattr(sys, 'frozen', False):
plugin_path = os.path.join(sys._MEIPASS, plugin_path)
parser = load_plugin(plugin_path, parser_name)
if parser is None:
self.logger.info('trying z{}'.format(parser_name))
parser = load_plugin(csirtg_smrt.parser.__path__[0], 'z{}'.format(parser_name))
if parser is None:
raise SystemError('Unable to load parser: {}'.format(parser_name))
self.logger.debug("loading parser: {}".format(parser))
return parser(self.client, fetch, rule, feed, limit=limit, filters=filters, fireball=self.fireball)
def get_pathToTemp(self, relative_path, css=False):
# relative_path is a List or Array
# set css to True if used for .setStyleSheet so '/' is set as separator instead of '\\'
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
if css and sys.platform == "win32":
# Fixes "could not parse stylesheet of object ..." thrown by .setStyleSheet
return os.path.join(base_path, *relative_path).replace("\\", "/")
return os.path.join(base_path, *relative_path)
def get_pathToTemp(self, relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
def get_pathToTemp(self, relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
def get_pathToTemp(self, relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
# def isFrozen(self):
# if getattr(sys, 'frozen', False):
# return True
# else:
# return False
def resource_filename(filename):
if is_frozen():
path = os.path.join(sys._MEIPASS, filename)
else:
path = pkg_resources.resource_filename("adblockradio", filename)
return path
def set_gst_plugin_path():
path = sys._MEIPASS + ";" + os.path.join(sys._MEIPASS, 'gst_plugins')
os.environ["GST_PLUGIN_PATH"] = path
os.environ["GST_PLUGIN_PATH_1_0"] = path
def _get_bundle_dir(self):
# set by PyInstaller, see http://pyinstaller.readthedocs.io/en/v3.2/runtime-information.html
if getattr(sys, 'frozen', False):
return sys._MEIPASS
else:
return os.path.dirname(os.path.abspath(__file__))
def resource_path(relative_path):
# function to locate data files for pyinstaller single file executable
# ref: http://stackoverflow.com/a/32048136
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
def get_definition_mdx(word, builder):
"""???????MDX?????"""
content = builder.mdx_lookup(word)
str_content = ""
if len(content) > 0:
for c in content:
str_content += c.replace("\r\n","").replace("entry:/","")
injection = []
injection_html = ''
output_html = ''
try:
# PyInstaller creates a temp folder and stores path in _MEIPASS
# base_path = sys._MEIPASS
base_path = os.path.dirname(sys.executable)
except Exception:
base_path = os.path.abspath(".")
resource_path = os.path.join(base_path, 'mdx')
file_util_get_files(resource_path, injection)
for p in injection:
if file_util_is_ext(p, 'html'):
injection_html += file_util_read_text(p)
#return [bytes(str_content, encoding='utf-8')]
output_html = str_content
return [output_html.encode('utf-8')]
def setup_working_dir():
# This is needed to set the current working folder when extracting from a single executable
if hasattr(sys, '_MEIPASS'):
p = os.path.join(sys._MEIPASS)
os.chdir(p)
print("changed folder to "+p)
def baseDir():
if getattr(sys, 'frozen', None):
if platform.system() == "Darwin":
return sys._MEIPASS
else: # Windows
#Preserve this value, in case sys.argv gets changed importing a plugin script
if ComicTaggerSettings.frozen_win_exe_path is None:
ComicTaggerSettings.frozen_win_exe_path = os.path.dirname( os.path.abspath( sys.argv[0] ) )
return ComicTaggerSettings.frozen_win_exe_path
else:
return os.path.dirname( os.path.abspath( __file__) )
def resource_path(relative_path):
""" Get absolute path to resource (source or frozen) """
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath('.'), relative_path)
def loadOpenSSL():
global OpenSSL
from os import path, environ
from ctypes.util import find_library
libdir = []
if getattr(sys,'frozen', None):
if 'darwin' in sys.platform:
libdir.extend([
path.join(environ['RESOURCEPATH'], '..', 'Frameworks','libcrypto.dylib'),
path.join(environ['RESOURCEPATH'], '..', 'Frameworks','libcrypto.1.0.0.dylib')
])
elif 'win32' in sys.platform or 'win64' in sys.platform:
libdir.append(path.join(sys._MEIPASS, 'libeay32.dll'))
else:
libdir.extend([
path.join(sys._MEIPASS, 'libcrypto.so'),
path.join(sys._MEIPASS, 'libssl.so'),
path.join(sys._MEIPASS, 'libcrypto.so.1.0.0'),
path.join(sys._MEIPASS, 'libssl.so.1.0.0'),
])
if 'darwin' in sys.platform:
libdir.extend(['libcrypto.dylib', '/usr/local/opt/openssl/lib/libcrypto.dylib'])
elif 'win32' in sys.platform or 'win64' in sys.platform:
libdir.append('libeay32.dll')
else:
libdir.append('libcrypto.so')
libdir.append('libssl.so')
if 'linux' in sys.platform or 'darwin' in sys.platform or 'freebsd' in sys.platform:
libdir.append(find_library('ssl'))
elif 'win32' in sys.platform or 'win64' in sys.platform:
libdir.append(find_library('libeay32'))
for library in libdir:
try:
OpenSSL = _OpenSSL(library)
return
except:
pass
raise Exception("Couldn't find and load the OpenSSL library. You must install it.")
def start_pixelated_user_agent(userid, soledad, keymanager, account):
try:
leap_session = LeapSessionAdapter(
userid, soledad, keymanager, account)
except Exception as exc:
log.error("Got error! %r" % exc)
config = Config()
leap_home = os.path.join(get_path_prefix(), 'leap')
config.leap_home = leap_home
leap_session.config = config
services_factory = SingleUserServicesFactory(
UserAgentMode(is_single_user=True))
if getattr(sys, 'frozen', False):
# we are running in a |PyInstaller| bundle
static_folder = os.path.join(sys._MEIPASS, 'leap', 'pixelated_www')
else:
static_folder = os.path.abspath(leap.pixelated_www.__path__[0])
set_static_folder(static_folder)
resource = RootResource(services_factory, static_folder=static_folder)
config.host = 'localhost'
config.port = 9090
config.sslkey = None
config.sslcert = None
config.manhole = False
d = leap_session.account.callWhenReady(
lambda _: _start_in_single_user_mode(
leap_session, config,
resource, services_factory))
return d
def here(module=None):
if STANDALONE:
# we are running in a |PyInstaller| bundle
return sys._MEIPASS
else:
if module:
return dirname(module.__file__)
else:
return dirname(__file__)