提交 04716f2f authored 作者: Pascal Lamblin's avatar Pascal Lamblin

Merge pull request #2764 from nouiz/windows

Windows fixed and support Anaconda blas on Windows
......@@ -170,7 +170,7 @@ can download the installation for free.
Alternative: AnacondaCE
Alternative: Anaconda
+++++++++++++++++++++++
ContinuumIO_ is providing a free Python distribution for Windows (32-bit
......@@ -178,11 +178,15 @@ and 64-bit), including all dependencies of Theano. If you are not
eligible for a download of EPD or Canopy (via a commercial, or free academic
licence), this is the easiest way to install
Theano's dependencies. Simply download and execute the installer from
`AnacondaCE download page <http://continuum.io/anacondace.html>`__,
then download and execute the :ref:`windows_anaconda`.
`Anaconda download page <https://store.continuum.io/cshop/anaconda/>`__,
and execute the following in Windows command line:
.. _ContinuumIO: http://continuum.io
.. code-block:: bash
$ conda install mingw libpython
Alternative: Python(x,y)
++++++++++++++++++++++++
......
......@@ -145,14 +145,17 @@ param = "g++"
try:
rc = call_subprocess_Popen(['g++', '-v'])
except OSError:
param = ""
rc = 1
if rc != 0:
param = ""
# On Mac we test for 'clang++' and use it by default
if sys.platform == 'darwin':
try:
rc = call_subprocess_Popen(['clang++', '-v'])
param = "clang++"
if rc == 0:
param = "clang++"
except OSError:
pass
......
......@@ -2,6 +2,7 @@
# as False, and the string s'True', 'true', '1' as True.
# We also accept the bool type as its corresponding value!
import inspect
import logging
import os
import shlex
......@@ -272,7 +273,11 @@ class ConfigParam(object):
try:
val_str = fetch_val_for_key(self.fullname)
except KeyError:
if callable(self.default):
if inspect.isgeneratorfunction(self.default):
for v in self.default():
val_str = v
self.__set__(None, val_str)
elif callable(self.default):
val_str = self.default()
else:
val_str = self.default
......
......@@ -1575,9 +1575,17 @@ class Compiler(object):
if fd is not None:
os.close(fd)
finally:
os.remove(path)
os.remove(exe_path)
if os.path.exists(path):
os.remove(path)
if os.path.exists(exe_path):
os.remove(exe_path)
if os.path.exists(exe_path + ".exe"):
os.remove(exe_path + ".exe")
except OSError, e:
if err is None:
err = str(e)
else:
err += "\n" + str(e)
compilation_ok = False
if not try_run and not output:
......
......@@ -160,6 +160,31 @@ _logger = logging.getLogger('theano.tensor.blas')
# We need to define blas.ldflag before we try to import scipy.
# Otherwise, we give an optimization warning for no reason in some cases.
def default_blas_ldflags():
"""This is a generator. It work in 2 step. The first we guess a
default blas, then we test it. If it fail, we return an empty
blas.
This is needed for Anaconda on Windows. I wasn't able to find how
to detect if the mkl from Anaconda can be reused or not. I was not
able to find a way to test it with try_flags correctly. Also, this
will test the real code, so we do not need to update the test in
case the software change. This also enables the test for all
cases.
"""
flags = static_default_blas_flags()
yield flags
# Now test it!
x = theano.tensor.fmatrix()
try:
theano.function([x], theano.tensor.blas._dot22(x,x))
except Exception as e:
print e
yield ""
def static_default_blas_flags():
try:
if (hasattr(numpy.distutils, '__config__') and
numpy.distutils.__config__):
......@@ -256,6 +281,20 @@ SOMEPATH/Canopy_64bit/User/lib/python2.7/site-packages/numpy/distutils/system_in
# same as what is in blas_info['libraries']?
['-l%s' % l for l in ["mk2_core", "mk2_intel_thread",
"mk2_rt"]])
# Anaconda
if "Anaconda" in sys.version and sys.platform == "win32":
lib_path = os.path.join(sys.prefix, 'pkgs')
for dir in os.listdir(lib_path):
if dir.startswith("mkl-rt-"):
lib_path = os.path.join(lib_path, dir, "DLLs")
break
if os.path.exists(lib_path):
#-LC:\\Users\\*\\Anaconda\\libs
flags = ['-L%s' % lib_path]
flags += ['-l%s' % l for l in ["mkl_core",
"mkl_intel_thread",
"mkl_rt"]]
return ' '.join(flags)
# if numpy was linked with library that are not installed, we
# can't reuse them.
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论