You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
211 lines
10 KiB
211 lines
10 KiB
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 but FAILS (404 Error) since user agent is not recognized, and setting user agent string does not fix it. use web_get above instead.
|
|
def web_get_BADUSERAGENT(url, file_name):
|
|
print("This function probably will not work since settings user agent doesn't work with urllib2 request object (user agent is not recognized, and 404 error is usually the result). Try web_get instead.")
|
|
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 and install Python 3 wheels instead of the example wheels listed in README.md. Press enter to exit.")
|
|
|