Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mesh_tissue/utils_pip.py')
-rw-r--r--mesh_tissue/utils_pip.py154
1 files changed, 154 insertions, 0 deletions
diff --git a/mesh_tissue/utils_pip.py b/mesh_tissue/utils_pip.py
new file mode 100644
index 00000000..adfad77f
--- /dev/null
+++ b/mesh_tissue/utils_pip.py
@@ -0,0 +1,154 @@
+# -*- coding:utf-8 -*-
+
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+# ----------------------------------------------------------
+# Author: Stephen Leger (s-leger)
+#
+# ----------------------------------------------------------
+import bpy
+import subprocess
+import sys
+
+
+PYPATH = sys.executable #bpy.app.binary_path_python
+
+
+class Pip:
+
+ def __init__(self):
+ self._ensurepip()
+
+ @staticmethod
+ def _ensure_user_site_package():
+ import os
+ import site
+ import sys
+ site_package = site.getusersitepackages()
+ if not os.path.exists(site_package):
+ site_package = bpy.utils.user_resource('SCRIPTS', "site_package", create=True)
+ site.addsitedir(site_package)
+ if site_package not in sys.path:
+ sys.path.append(site_package)
+ '''
+ @staticmethod
+ def _ensure_user_site_package():
+ import os
+ import site
+ import sys
+ site_package = site.getusersitepackages()
+ if os.path.exists(site_package):
+ if site_package not in sys.path:
+ sys.path.append(site_package)
+ else:
+ site_package = bpy.utils.user_resource('SCRIPTS', "site_package", create=True)
+ site.addsitedir(site_package)
+ '''
+ def _cmd(self, action, options, module):
+ if options is not None and "--user" in options:
+ self._ensure_user_site_package()
+
+ cmd = [PYPATH, "-m", "pip", action]
+
+ if options is not None:
+ cmd.extend(options.split(" "))
+
+ cmd.append(module)
+ return self._run(cmd)
+
+ def _popen(self, cmd):
+ popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
+ for stdout_line in iter(popen.stdout.readline, ""):
+ yield stdout_line
+ popen.stdout.close()
+ popen.wait()
+
+ def _run(self, cmd):
+ res = False
+ status = ""
+ for line in self._popen(cmd):
+ if "ERROR:" in line:
+ status = line.strip()
+ if "Error:" in line:
+ status = line.strip()
+ print(line)
+ if "Successfully" in line:
+ status = line.strip()
+ res = True
+ return res, status
+
+ def _ensurepip(self):
+ pip_not_found = False
+ try:
+ import pip
+ except ImportError:
+ pip_not_found = True
+ pass
+ if pip_not_found:
+ self._run([PYPATH, "-m", "ensurepip", "--default-pip"])
+
+ @staticmethod
+ def upgrade_pip():
+ return Pip()._cmd("install", "--upgrade", "pip")
+
+ @staticmethod
+ def uninstall(module, options=None):
+ """
+ :param module: string module name with requirements see:[1]
+ :param options: string command line options see:[2]
+ :return: True on uninstall, False if already removed, raise on Error
+ [1] https://pip.pypa.io/en/stable/reference/pip_install/#id29
+ [2] https://pip.pypa.io/en/stable/reference/pip_install/#id47
+ """
+ if options is None or options.strip() == "":
+ # force confirm
+ options = "-y"
+ return Pip()._cmd("uninstall", options, module)
+
+ @staticmethod
+ def install(module, options=None):
+ """
+ :param module: string module name with requirements see:[1]
+ :param options: string command line options see:[2]
+ :return: True on install, False if already there, raise on Error
+ [1] https://pip.pypa.io/en/stable/reference/pip_install/#id29
+ [2] https://pip.pypa.io/en/stable/reference/pip_install/#id47
+ """
+ if options is None or options.strip() == "":
+ # store in user writable directory, use wheel, without deps
+ options = "--user --only-binary all --no-deps"
+ return Pip()._cmd("install", options, module)
+
+ @staticmethod
+ def blender_version():
+ """
+ :return: blender version tuple
+ """
+ return bpy.app.version
+
+ @staticmethod
+ def python_version():
+ """
+ :return: python version object
+ """
+ import sys
+ # version.major, version.minor, version.micro
+ return sys.version_info