diff --git a/platformio/app.py b/platformio/app.py index 54ddf9be..25ec8ce7 100644 --- a/platformio/app.py +++ b/platformio/app.py @@ -12,9 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +import hashlib import json import uuid -import hashlib from copy import deepcopy from os import environ, getenv from os.path import getmtime, isfile, join diff --git a/platformio/builder/main.py b/platformio/builder/main.py index 15a248b2..2b5ea8d3 100644 --- a/platformio/builder/main.py +++ b/platformio/builder/main.py @@ -14,9 +14,8 @@ import base64 import json -import sys from os import environ -from os.path import join, normpath +from os.path import join from time import time from SCons.Script import (ARGUMENTS, COMMAND_LINE_TARGETS, @@ -91,7 +90,7 @@ DEFAULT_ENV_OPTIONS = dict( util.get_projectlib_dir(), util.get_projectlibdeps_dir(), join("$PIOHOME_DIR", "lib") ], - PYTHONEXE=normpath(sys.executable)) + PYTHONEXE=util.get_pythonexe_path()) if not int(ARGUMENTS.get("PIOVERBOSE", 0)): print "Verbose mode can be enabled via `-v, --verbose` option" diff --git a/platformio/commands/upgrade.py b/platformio/commands/upgrade.py index 5f81807d..ef613fc8 100644 --- a/platformio/commands/upgrade.py +++ b/platformio/commands/upgrade.py @@ -12,9 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -import os import re -import sys import click import requests @@ -43,7 +41,7 @@ def cli(): r = None try: for cmd in cmds: - cmd = [os.path.normpath(sys.executable), "-m"] + cmd + cmd = [util.get_pythonexe_path(), "-m"] + cmd r = None r = util.exec_command(cmd) diff --git a/platformio/ide/projectgenerator.py b/platformio/ide/projectgenerator.py index ecd2f868..03df1840 100644 --- a/platformio/ide/projectgenerator.py +++ b/platformio/ide/projectgenerator.py @@ -15,9 +15,7 @@ import json import os import re -import sys -from os.path import (abspath, basename, expanduser, isdir, isfile, join, - normpath, relpath) +from os.path import abspath, basename, expanduser, isdir, isfile, join, relpath import bottle @@ -63,7 +61,7 @@ class ProjectGenerator(object): envdata = self.get_project_env() if "env_name" not in envdata: return data - cmd = [normpath(sys.executable), "-m", "platformio", "-f"] + cmd = [util.get_pythonexe_path(), "-m", "platformio", "-f"] if app.get_session_var("caller_id"): cmd.extend(["-c", app.get_session_var("caller_id")]) cmd.extend(["run", "-t", "idedata", "-e", envdata['env_name']]) diff --git a/platformio/managers/platform.py b/platformio/managers/platform.py index 4372bb0c..05a303b7 100644 --- a/platformio/managers/platform.py +++ b/platformio/managers/platform.py @@ -15,7 +15,6 @@ import base64 import os import re -import sys from imp import load_source from multiprocessing import cpu_count from os.path import basename, dirname, isdir, isfile, join @@ -260,18 +259,8 @@ class PlatformRunMixin(object): return result def _run_scons(self, variables, targets): - # pass current PYTHONPATH to SCons - if "PYTHONPATH" in os.environ: - _PYTHONPATH = os.environ.get("PYTHONPATH").split(os.pathsep) - else: - _PYTHONPATH = [] - for p in os.sys.path: - if p not in _PYTHONPATH: - _PYTHONPATH.append(p) - os.environ['PYTHONPATH'] = os.pathsep.join(_PYTHONPATH) - cmd = [ - os.path.normpath(sys.executable), + util.get_pythonexe_path(), join(self.get_package_dir("tool-scons"), "script", "scons"), "-Q", "-j %d" % self.get_job_nums(), "--warn=no-no-parallel-support", "-f", join(util.get_source_dir(), "builder", "main.py") @@ -283,6 +272,7 @@ class PlatformRunMixin(object): for key, value in variables.items(): cmd.append("%s=%s" % (key.upper(), base64.b64encode(value))) + util.copy_pythonpath_to_osenv() result = util.exec_command( cmd, stdout=util.AsyncPipe(self.on_run_out), diff --git a/platformio/util.py b/platformio/util.py index 4dbf530e..0a55725a 100644 --- a/platformio/util.py +++ b/platformio/util.py @@ -22,7 +22,7 @@ import subprocess import sys from glob import glob from os.path import (abspath, basename, dirname, expanduser, isdir, isfile, - join, splitdrive) + join, normpath, splitdrive) from platform import system, uname from shutil import rmtree from threading import Thread @@ -299,6 +299,16 @@ def exec_command(*args, **kwargs): return result +def copy_pythonpath_to_osenv(): + _PYTHONPATH = [] + if "PYTHONPATH" in os.environ: + _PYTHONPATH = os.environ.get("PYTHONPATH").split(os.pathsep) + for p in os.sys.path: + if p not in _PYTHONPATH: + _PYTHONPATH.append(p) + os.environ['PYTHONPATH'] = os.pathsep.join(_PYTHONPATH) + + def get_serialports(): try: from serial.tools.list_ports import comports @@ -446,6 +456,10 @@ def get_frameworks(type_=None): return frameworks +def get_pythonexe_path(): + return os.environ.get("PYTHONEXEPATH", normpath(sys.executable)) + + def where_is_program(program, envpath=None): env = os.environ if envpath: