Skip to content

Commit

Permalink
Implemented auto-installer script
Browse files Browse the repository at this point in the history
  • Loading branch information
ivankravets committed Jun 21, 2014
1 parent c4be964 commit fd1fc99
Show file tree
Hide file tree
Showing 3 changed files with 151 additions and 8 deletions.
37 changes: 30 additions & 7 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,6 @@ Quickstart

.. code-block:: bash
# Install platformio
$ pip install platformio && pip install --egg scons
# Print all availalbe development platforms for installing
$ platformio search all
Expand All @@ -107,20 +104,46 @@ Installation

All commands below should be executed in
`Command-line <http://en.wikipedia.org/wiki/Command-line_interface>`_
application in your OS:
application in your *OS*:

* *Unix/Linux/OS X* this is *Terminal* application.
* *Windows* this is
`Command Prompt <http://en.wikipedia.org/wiki/Command_Prompt>`_ (``cmd.exe``)
application.

1. Check a ``python`` version:
Also, the `Python Interpreter <https://www.python.org/downloads/>`_ (2.6 or 2.7)
is required.


Super-Quick
~~~~~~~~~~~

To install or upgrade *PlatformIO*, download
`get-platformio.py <https://raw.githubusercontent.com/ivankravets/platformio/develop/scripts/get-platformio.py>`_ script.

Then run the following (which may require administrator access):

.. code-block:: bash
$ python get-platformio.py
On *Windows OS* it may look like:

.. code-block:: bash
C:\Python27\python.exe get-platformio.py
Full Guide
~~~~~~~~~~

1. Check a ``python`` version (only 2.6-2.7 is supported):

.. code-block:: bash
$ python --version
Windows OS Users only:
*Windows OS* Users only:

* `Download Python 2.7 <https://www.python.org/downloads/>`_ and install it.
* Add to PATH system variable ``;C:\Python27;C:\Python27\Scripts;`` and
Expand All @@ -129,7 +152,7 @@ Windows OS Users only:
<http://www.computerhope.com/issues/ch000549.htm>`_.


2. Check a ``pip`` tool for installing and managing Python packages:
2. Check a ``pip`` tool for installing and managing *Python* packages:

.. code-block:: bash
Expand Down
2 changes: 1 addition & 1 deletion platformio/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def get_command(self, ctx, name):


@command(cls=PlatformioCLI)
@version_option(__version__)
@version_option(__version__, "platformio")
def cli():
pass

Expand Down
120 changes: 120 additions & 0 deletions scripts/get-platformio.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# Copyright (C) Ivan Kravets <[email protected]>
# See LICENSE for details.

import os
import sys
from subprocess import check_output
from tempfile import NamedTemporaryFile


CURINTERPRETER_PATH = os.path.normpath(sys.executable)
IS_WINDOWS = sys.platform.startswith("win")


def fix_winpython_pathenv():
"""
Add Python & Python Scripts to the search path on Windows
"""
import ctypes
from ctypes.wintypes import HWND, UINT, WPARAM, LPARAM, LPVOID
try:
import _winreg as winreg
except ImportError:
import winreg

# took these lines from the native "win_add2path.py"
pythonpath = os.path.dirname(CURINTERPRETER_PATH)
scripts = os.path.join(pythonpath, "Scripts")

with winreg.CreateKey(winreg.HKEY_CURRENT_USER, u"Environment") as key:
try:
envpath = winreg.QueryValueEx(key, u"PATH")[0]
except WindowsError:
envpath = u"%PATH%"

paths = [envpath]
for path in (pythonpath, scripts):
if path and path not in envpath and os.path.isdir(path):
paths.append(path)

envpath = os.pathsep.join(paths)
winreg.SetValueEx(key, u"PATH", 0, winreg.REG_EXPAND_SZ, envpath)
winreg.ExpandEnvironmentStrings(envpath)

# notify the system about the changes
SendMessage = ctypes.windll.user32.SendMessageW
SendMessage.argtypes = HWND, UINT, WPARAM, LPVOID
SendMessage.restype = LPARAM
SendMessage(0xFFFF, 0x1A, 0, u"Environment")
return True


def exec_python_cmd(args):
return check_output([CURINTERPRETER_PATH] + args, shell=IS_WINDOWS).strip()


def install_pip():
try:
from urllib2 import urlopen
except ImportError:
from urllib.request import urlopen

f = NamedTemporaryFile(delete=False)
response = urlopen("https://bootstrap.pypa.io/get-pip.py")
f.write(response.read())
f.close()

try:
print (exec_python_cmd([f.name]))
finally:
os.unlink(f.name)


def install_pypi_packages(packages):
for p in packages:
print (exec_python_cmd(["-m", "pip", "install", "-U"] + p.split()))


def main():
steps = [
("Fixing Windows %PATH% Environment", fix_winpython_pathenv, []),
("Installing Python Package Manager", install_pip, []),
("Installing PlatformIO and dependencies", install_pypi_packages,
(["platformio", "--egg scons"],)),
]

if not IS_WINDOWS:
del steps[0]

is_error = False
for s in steps:
print ("\n==> %s ..." % s[0])
try:
s[1](*s[2])
print ("[SUCCESS]")
except Exception, e:
is_error = True
print (e)
print ("[FAILURE]")

if is_error:
print ("The installation process has been FAILED!\n"
"Please report about this problem here\n"
"< https://github.com/ivankravets/platformio/issues >")
return
else:
print ("\n ==> Installation process has been "
"successfully FINISHED! <==\n")

try:
print (check_output("platformio", shell=IS_WINDOWS))
except:
try:
print (exec_python_cmd(["-m", "platformio"]))
finally:
print ("\n Please RESTART your Terminal Application and run "
"`platformio --help` command.")


if __name__ == "__main__":
sys.exit(main())

0 comments on commit fd1fc99

Please sign in to comment.