poikilos
9 years ago
committed by
Jacob Gustafson
4 changed files with 242 additions and 26 deletions
@ -0,0 +1,5 @@ |
|||||
|
@echo off |
||||
|
SET TRY_PYTHON_EXE=C:\Python27\pythonw.exe |
||||
|
SET MT_CM_INSTALLER_PY=install-chunkymap-on-windows.py |
||||
|
IF EXIST "%TRY_PYTHON_EXE%" THEN "%TRY_PYTHON_EXE%" "%MT_CM_INSTALLER_PY%" |
||||
|
IF NOT EXIST "%TRY_PYTHON_EXE%" THEN echo You are missing %TRY_PYTHON_EXE% so this batch file cannot use it--try running %MT_CM_INSTALLER_PY% in your favorite Python 2. |
@ -0,0 +1,210 @@ |
|||||
|
import platform |
||||
|
import urllib2 |
||||
|
import sys |
||||
|
import subprocess |
||||
|
import os |
||||
|
import traceback |
||||
|
#import os.path |
||||
|
|
||||
|
|
||||
|
def view_traceback(): |
||||
|
ex_type, ex, tb = sys.exc_info() |
||||
|
traceback.print_tb(tb) |
||||
|
del tb |
||||
|
|
||||
|
#as per Pedro Lobito on http://stackoverflow.com/questions/802134/changing-user-agent-on-urllib2-urlopen |
||||
|
from urllib import FancyURLopener |
||||
|
class MyOpener(FancyURLopener, object): |
||||
|
version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11' |
||||
|
|
||||
|
def web_get(url, file_name): |
||||
|
myopener = MyOpener() |
||||
|
print("Downloading "+url+"...") |
||||
|
myopener.retrieve(url, file_name) |
||||
|
|
||||
|
|
||||
|
#as per http://stackoverflow.com/questions/22676/how-do-i-download-a-file-over-http-using-python |
||||
|
def web_get_BADUSERAGENT(url, file_name): |
||||
|
file_name = None |
||||
|
try: |
||||
|
#url = "http://download.thinkbroadband.com/10MB.zip" |
||||
|
|
||||
|
#file_name = url.split('/')[-1] |
||||
|
|
||||
|
u = urllib2.urlopen(url) |
||||
|
f = open(file_name, 'wb') |
||||
|
meta = u.info() |
||||
|
file_size = int(meta.getheaders("Content-Length")[0]) |
||||
|
print "Downloading: %s Bytes: %s" % (file_name, file_size) |
||||
|
|
||||
|
file_size_dl = 0 |
||||
|
block_sz = 8192 |
||||
|
while True: |
||||
|
buffer = u.read(block_sz) |
||||
|
if not buffer: |
||||
|
break |
||||
|
|
||||
|
file_size_dl += len(buffer) |
||||
|
f.write(buffer) |
||||
|
status = r"%10d [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size) |
||||
|
status = status + chr(8)*(len(status)+1) |
||||
|
print status, |
||||
|
|
||||
|
f.close() |
||||
|
except: |
||||
|
print("Could not finish downloading '"+url+"':") |
||||
|
view_traceback() |
||||
|
return file_name |
||||
|
|
||||
|
python_folder_path = os.path.dirname(sys.executable) |
||||
|
|
||||
|
print("") |
||||
|
print("This script will install numpy and PIL wheels into "+python_folder_path+" on Windows. If this doesn't sound like something you should do, please press Ctrl C and terminate this script.") |
||||
|
|
||||
|
os_bits="64" |
||||
|
print(platform.architecture()[0]) |
||||
|
is_detected = False |
||||
|
if "32" in platform.architecture()[0]: |
||||
|
os_bits = "32" |
||||
|
is_detected = True |
||||
|
elif "64" in platform.architecture()[0]: |
||||
|
os_bits = "64" |
||||
|
is_detected = True |
||||
|
detected_msg = " (shown above)" |
||||
|
if is_detected: |
||||
|
detected_msg = " (detected above)" |
||||
|
|
||||
|
print("") |
||||
|
answer = raw_input("Enter #of bits in your python architecture [blank for "+os_bits+detected_msg+"]: ") |
||||
|
|
||||
|
if answer is not None: |
||||
|
answer = answer.strip() |
||||
|
if len(answer)>0: |
||||
|
os_bits=answer |
||||
|
pip_update_cmd_string=sys.executable+" -m pip install --upgrade pip wheel setuptools" |
||||
|
subprocess.call(pip_update_cmd_string) |
||||
|
|
||||
|
downloaded_numpy_name = None |
||||
|
downloaded_pillow_name = None |
||||
|
remote_numpy_path = None |
||||
|
|
||||
|
if os_bits=="32": |
||||
|
downloaded_numpy_name="numpy-1.10.4+mkl-cp27-cp27m-win32.whl" |
||||
|
downloaded_pillow_name="Pillow-3.1.1-cp27-none-win32.whl" |
||||
|
elif os_bits=="64": |
||||
|
downloaded_numpy_name="numpy-1.10.4+mkl-cp27-cp27m-win_amd64.whl" |
||||
|
downloaded_pillow_name="Pillow-3.1.1-cp27-none-win_amd64.whl" |
||||
|
|
||||
|
remote_numpy_path = "http://www.lfd.uci.edu/~gohlke/pythonlibs/djcobkfp/"+downloaded_numpy_name |
||||
|
remote_pillow_path = "http://www.lfd.uci.edu/~gohlke/pythonlibs/djcobkfp/"+downloaded_pillow_name |
||||
|
|
||||
|
profile_path=None |
||||
|
if os.path.sep=="\\": |
||||
|
profile_path=os.environ.get("USERPROFILE") |
||||
|
#elif os.path.sep=="/": |
||||
|
# profile_path=os.environ.get("HOME") |
||||
|
if profile_path is not None and os.path.isdir(profile_path): |
||||
|
downloads_path = os.path.join(profile_path, "Downloads") |
||||
|
else: |
||||
|
downloads_path = "." |
||||
|
|
||||
|
downloaded_pillow_path = os.path.join(downloads_path, downloaded_pillow_name) |
||||
|
downloaded_numpy_path = os.path.join(downloads_path, downloaded_numpy_name) |
||||
|
|
||||
|
download_test_enable = True |
||||
|
|
||||
|
if download_test_enable: |
||||
|
if not os.path.isfile(downloaded_numpy_path): |
||||
|
web_get(remote_numpy_path, downloaded_numpy_path) |
||||
|
if os.path.isfile(downloaded_numpy_path): |
||||
|
print("Successfully downloaded '"+downloaded_numpy_path+"'") |
||||
|
else: |
||||
|
print(downloaded_pillow_path+" is present") |
||||
|
if not os.path.isfile(downloaded_pillow_path): |
||||
|
web_get(remote_pillow_path, downloaded_pillow_path) |
||||
|
if os.path.isfile(downloaded_pillow_path): |
||||
|
print("Successfully downloaded '"+downloaded_pillow_path+"'") |
||||
|
else: |
||||
|
print(downloaded_pillow_path+" is present") |
||||
|
|
||||
|
|
||||
|
python_folder_name = os.path.basename(python_folder_path) |
||||
|
if python_folder_name.lower()[:7]!="python3": |
||||
|
is_python_version_confirmed = False |
||||
|
if python_folder_name.lower()[:7]=="python2": |
||||
|
is_python_version_confirmed = True |
||||
|
if not is_python_version_confirmed: |
||||
|
confirm_string = "n" |
||||
|
answer = raw_input("You are running this script from '"+python_folder_path+"' which does not appear to be a python folder. Are you sure you REALLY sure you want to install Python 2 wheels and chunkymap there y/[n]? ") |
||||
|
if answer!=None: |
||||
|
answer = answer.strip() |
||||
|
else: |
||||
|
answer = "" |
||||
|
if answer.lower()=="y" or answer.lower()=="yes": |
||||
|
is_python_version_confirmed = True |
||||
|
else: |
||||
|
print("Installation of chunkymap was cancelled by the user.") |
||||
|
if is_python_version_confirmed: |
||||
|
python_Lib_path = os.path.join(python_folder_path,"Lib") |
||||
|
python_Lib_site_packages_path = os.path.join(python_Lib_path, "site-packages") |
||||
|
if os.path.isdir(python_Lib_site_packages_path): |
||||
|
|
||||
|
installed_numpy_path = os.path.join(python_Lib_site_packages_path, "numpy") |
||||
|
if not os.path.isdir(installed_numpy_path): |
||||
|
#downloaded_numpy_path = os.path.join(downloads_path, downloaded_numpy_name) |
||||
|
install_numpy_cmd_string = sys.executable+" -m pip install \""+downloaded_numpy_path+"\"" |
||||
|
if not os.path.isfile(downloaded_numpy_path): |
||||
|
print("Trying to download "+remote_numpy_path+"...") |
||||
|
web_get(remote_numpy_path, downloaded_numpy_path) |
||||
|
else: |
||||
|
print("Detected previously-downloaded '"+downloaded_numpy_path+"'") |
||||
|
|
||||
|
if os.path.isfile(downloaded_numpy_path): |
||||
|
subprocess.call(install_numpy_cmd_string) |
||||
|
|
||||
|
if os.path.isdir(installed_numpy_path): |
||||
|
print("Numpy was detected at '"+installed_numpy_path+"'") |
||||
|
installed_pillow_path = os.path.join(python_Lib_site_packages_path, "PIL") |
||||
|
if not os.path.isdir(installed_pillow_path): |
||||
|
#downloaded_pillow_path = os.path.join(downloads_path, downloaded_pillow_name) |
||||
|
install_pillow_cmd_string = sys.executable+" -m pip install \""+downloaded_pillow_path+"\"" |
||||
|
if not os.path.isfile(downloaded_pillow_path): |
||||
|
print("") |
||||
|
print("Trying to download "+remote_pillow_path+"...") |
||||
|
web_get(remote_pillow_path, downloaded_pillow_path) |
||||
|
else: |
||||
|
print("Detected previously-downloaded '"+downloaded_pillow_path+"'") |
||||
|
if os.path.isfile(downloaded_pillow_path): |
||||
|
subprocess.call(install_pillow_cmd_string) |
||||
|
if os.path.isdir(installed_pillow_path): |
||||
|
downloaded_chunkymap_name="chunkymap.zip" |
||||
|
downloaded_chunkymap_path=os.path.join(downloads_path,downloaded_chunkymap_name) |
||||
|
run_py_path="chunkymap-regen.py" |
||||
|
remote_chunkymap_path="https://github.com/expertmm/minetest-chunkymap/archive/master.zip" |
||||
|
if not os.path.isfile(run_py_path): |
||||
|
if not os.path.isfile(downloaded_chunkymap_path): |
||||
|
web_get(remote_chunkymap_path,downloaded_chunkymap_path) |
||||
|
if os.path.isfile(downloaded_chunkymap_path): |
||||
|
print("Successfully downloaded "+downloaded_chunkymap_name) |
||||
|
else: |
||||
|
print("Failed to download or detect chunkymap-regen.py -- please download "+remote_chunkymap_path) |
||||
|
print("(You must right-click on "+downloaded_chunkymap_path+" then click Extract All, then you can run this file from that folder to redetect a compatible python and write that python to "+run_bat_path) |
||||
|
else: |
||||
|
print("Now you can run "+run_py_path+" using: ") |
||||
|
print(" "+sys.executable+" "+run_py_path) |
||||
|
run_bat_path="chunkymap-regen-loop.bat" |
||||
|
if os.path.isfile(run_bat_path): |
||||
|
os.remove(run_bat_path) |
||||
|
outs = open(run_bat_path, 'w') |
||||
|
outs.write(sys.executable+" "+run_py_path+"\n") |
||||
|
outs.close() |
||||
|
print(" OR by double-clicking") |
||||
|
print(" "+run_bat_path) |
||||
|
else: |
||||
|
raw_input("Cannot detect nor install "+installed_pillow_path+" so installation cannot continue. Try downloading "+downloaded_pillow_name+" to '"+downloads_path+"' then run this script again. Press enter to exit.") |
||||
|
else: |
||||
|
raw_input("Cannot detect nor install "+installed_numpy_path+" so installation cannot continue. Try downloading "+downloaded_numpy_name+" to '"+downloads_path+"' then run this script again. Press enter to exit.") |
||||
|
else: |
||||
|
raw_input("Cannot detect a site-packages folder in python installation of current python executable "+sys.executable+" so installation cannot continue. Press enter to exit.") |
||||
|
else: |
||||
|
raw_input("This installer does not know the correct wheels for python 3 (detected at "+python_folder_path+"). Please run this script with python 2 instead. Please see README.md for manual installation, but download python 3 wheels instead of the example wheels listed in README.md. Press enter to exit.") |
Loading…
Reference in new issue