文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

Julia语言

Julia 是一个用于技术计算的高级、高性能的动态语言。Julia的主页是julialang.org. 下面是Julia源码的GitHub库,包括编译指令和Julia安装说明。

Resources

第 1 段(可获 2 积分)

针对开发者的讨论邮件列表是 http://groups.google.com/group/julia-dev/. 欢迎所有人, 但由于信息量太大, 我们更倾向于有深度的讨论. 新的开发者可以在这里CONTRIBUTING 找到Julia 的相关注释以及贡献代码

外部资源链接

目前支持的平台

  • GNU/Linux
  • Darwin/OS X
  • FreeBSD
  • Windows

所有的系统都支持x86 / 64(64位)和x86架构(32位). 实验类型和早期的ARM架构也同样支持.

第 2 段(可获 2 积分)

源码下载和编译

首先,通过克隆Git仓库获取源码:

git clone git://github.com/JuliaLang/julia.git

(如果你在防火墙后面,你可能需要使用https协议而不是git协议:

git config --global url."https://".insteadOf git://

确保还要配置你的系统使用正确的代理设置,例如通过设置https_proxy和http_proxy变量。)

默认情况下,你会构建最新不稳定版本的Julia。不过,大多数用户应该使用最新稳定版本的Julia,当前最新的稳定版本是0.4系列。要获得这个版本可以切换到Julia目录并执行:

git checkout release-0.4

现在执行make来构建julia可执行文件。要执行并行构建使用make -j N并且提供并发进程的最大数量。 (详见特定平台的构建说明。) 首次编译时,它会自动下载并构建它的外部依赖库。这需要花些时间,但只需一次。如果默认的构建不能正常工作,那么你需要设置特定的make参数,你可以把它们保存在Make.user文件里面。构建会自动检查是否存在Make.user文件,存在的话就使用它。构建Julia 需要1.5GiB的磁盘空间和将近700MiB的虚拟内存。

第 4 段(可获 2 积分)

对于从0.5.0-dev开始的julia构建,您可以通过在命令行中指定make O=<build-directory> configure来创建Julia的源码树外(out-of-tree)构建。 这将在指定的目录中创建一个目录镜像,包含所有必要的用于构建Julia的Makefile。 这些构建将共享Julia和deps / srccache中的源文件。 每个源码树外(out-of-tree)构建目录都可以有自己的Make.user文件,以覆盖顶级文件夹中的全局Make.user文件。

如果您需要在不允许访问外网的环境中构建Julia,请使用make -C deps getall下载所有必需的文件。 然后,将julia目录复制到目标环境并使用make进行构建。

第 5 段(可获 2 积分)

注意:如果任何构建目录的父目录在其名称中有空格或其他shell元字符(如$或:)(这是由于GNU make中的限制),构建过程就会失败。

一旦它被构建,您就可以在上面创建的目录(julia目录)中使用其完整路径运行julia可执行文件,或者从任何地方运行它,或者

  • 为julia目录中的julia可执行文件添加一个软链接到/usr/local/bin(或路径中已有的任何合适的目录),或者

  • 将julia目录添加到此shell会话的可执行路径(在bash中:export PATH =“$(pwd):$ PATH”;在csh或tcsh中:set path =($ path $ cwd),或者

  • 将julia目录永久添加到可执行路径(例如,添加到.bash_profile中)或者

  • 将prefix=/path/to/install/folder写入Make.user然后运行make install。 如果此文件夹中已经安装了Julia版本,则应在运行make install之前将其删除。

第 6 段(可获 2 积分)

现在你可以像这样运行Julia:

julia

如果一切正常工作,你会看到一个Julia标语和一个交互式的命令提示符,你可以在其中输入表达式进行计算。(PATH中所指定的旧的不兼容的库可能导致库相关的错误。在这种情况下,尝试往前移动PATH中的julia路径).

你对Julia的第一次测试应该是去确认你的构建是否正常工作。在Julia的源目录中的UNIX / Windows命令提示符中,键入make testall命令。 你可看到它输出一系列正在执行的测试;如果他们正常完成没有产生错误,那么你就可以开始正常使用Julia了。

第 7 段(可获 2 积分)

您可以阅读手册中的入门指南

如果您正在构建一个用于在Linux,OS X或Windows上分发的Julia软件包,请查看DISTRIBUTING.md中的详细注释。

更新现有的源代码树

如果你以前使用git clone下载了julia,你可以使用git pull更新现有的源代码树,而不是重新开始:

cd julia
git pull && make

假设您没有对与上游更新(upstream updates)冲突的源代码树进行任何更改,这些命令将触发构建以更新到最新版本。

一般故障排除

第 8 段(可获 2 积分)
  1. 随着时间的推移,基本库累积了足够多的变化后,使得构建系统映像的引导过程失败。 如果发生这种情况,构建可能会失败,并显示错误

    *** This error is usually fixed by running 'make clean'. If the error persists, try 'make cleanall' ***

    如上所述,运行make clean && make通常就足够了。 偶尔,需要运行make cleanall执行更强大的清理。

  2. 当引入新版本的外部依赖项时,可能偶尔会导致与旧版本的现有构建冲突。

    a. 使用特定的make目标以帮助擦除现有的依赖性构建。 例如,make -C deps clean-llvm将清除现有的llvm版本,以便在下次调用make时,从下载的源分发版重建llvm。 make -C deps distclean-llvm清理能力更加强大,它会同时删除下载的源码发行包,确保下载源分发的新副本,并且下次调用make时应用新的补丁。

    b. 要删除julia 及其所有依赖的二进制文件,请删除源码树中的./usr目录。

  3. 如果您最近更新了OS X,请务必运行xcode-select --install更新命令行工具。 否则,您可能会遇到缺少头文件和库的错误,例如 ld: library not found for -lcrt1.10.6.o。

  4. 如果您移动了源目录,您可能会遇到这样的错误: CMake Error: The current CMakeCache.txt directory ... is different than the directory ... where CMakeCache.txt was created.。在这种情况下,您可以删除deps下的错误依赖

  5. 在极端情况下,您可能希望将源树重置为原始状态。 以下git命令可能会帮到你:

    git reset --hard #Forcibly remove any changes to any files under version control
    git clean -x -f -d #Forcibly remove any file or directory not under version control

    为了避免丢掉你的工作,请确保在运行这些命令之前知道这些命令的作用。 因为git将无法撤消这些更改!

第 9 段(可获 2 积分)

卸载Julia

Julia不安装任何东西到它所被克隆到的目录外。通过删除此目录可将Julia完全卸载。默认情况下,Julia包安装在~/.julia,并且可以通过删除~/.julia进行卸载。

 

特定平台的构建说明

Linux

概要

  • 构建Julia需要GCC 4.7或以上的版本。
  • 要使用不在系统库搜索路径中的外部共享库,在Make.user中设置USE_SYSTEM_XXX=1LDFLAGS=-Wl,-rpath,/path/to/dir/contains/libXXX.so。
    • 不设置LDFLAGS,也可以将该库目录放入环境变量LD_LIBRARY_PATH中(在编译和运行时) 。
  • 请参阅外部依赖.
第 10 段(可获 2 积分)

架构定制

Julia可以通过配置Makefile中的ARCH变量来构建一个非通用的架构。更多定制选项请参阅Make.inc中对应的section,如MARCH 和 JULIA_CPU_TARGET。

例如,要构建Pentium 4,设置MARCH=pentium4并安装所需的系统链接库。在Ubuntu上,这些可能包含lib32gfortran3 (同时手动调用ln -s /usr/lib32/libgfortran3.so.0 /usr/lib32/libgfortran3.so) 和lib32gcc1, lib32stdc++6, 等等。

你也可以设置 MARCH=native来为当前机器的CPU定制最高性能的构建。

第 11 段(可获 2 积分)

Ubuntu

julia-deps PPA包含Julia依赖项的更新的安装包,如果你想使用系统库而不是在构建过程中下载和构建系统库。 请参阅系统提供的库

想要快速简单的开始安装,travis.yml 的before_install部分是一个很好的资源。 请注意,这些说明是针对Ubuntu 12.04的,对于更高版本,您可能需要安装较新版本的依赖项,例如libunwind8-dev而不是libunwind7-dev。

RHEL/CentOS 6

在RHEL/ CentOS 6系统上,用于构建Julia的默认编译器(gcc4.4)太旧了。

第 12 段(可获 2 积分)

安装或联系你的系统管理员安装较新版本的gcc。Scientific Linux Developer Toolset能够正常工作。

Linux构建疑难解答

问题可能的解决方案
OpenBLAS 构建失败在Make.user中设置下列构建选择之一然后重新构建:
  • OPENBLAS_TARGET_ARCH=BARCELONA (AMD CPUs) 或OPENBLAS_TARGET_ARCH=NEHALEM (Intel CPUs)
    • 设置OPENBLAS_DYNAMIC_ARCH = 0禁用在一个二进制文件中编译多个架构。
  • OPENBLAS_NO_AVX2 = 1 禁用AVX2指令,允许使用旧版本的binutils 用OPENBLAS_DYNAMIC_ARCH = 1编译OpenBLAS。
  • USE_SYSTEM_BLAS=1 使用系统提供的libblas
    • 当安装了多个BLAS版本时,设置LIBBLAS=-lopenblasLIBBLASNAME=libopenblas来强制使用系统提供的OpenBLAS。

如果你得到类似这样的错误../kernel/x86_64/dgemm_kernel_4x4_haswell.S:1709: Error: no such instruction: `vpermpd $ 0xb1,%ymm0,%ymm0',那么你需要设置OPENBLAS_DYNAMIC_ARCH = 0OPENBLAS_NO_AVX2 = 1, 或者你需要一个更新版本的binutils (2.18或以上的版本). (Issue #7653)

非法指令错误查看是否因为你的CPU支持AVX但你的操作系统不支持(例如通过如this issue中所述的虚拟机)。
第 13 段(可获 2 积分)

OS X

您需要安装Xcode命令行工具:在终端中运行xcode-select --install。您需要在每次OS X更新后重新运行此终端命令,否则您可能会遇到缺少库或头文件的错误。你还需要一个64位的gfortran来编译Julia依赖。 Brew,Fink和MacPorts中的gfortran-4.7(和更新版本)编译器用于构建Julia。

Clang现在默认使用在OS X 10.7及以上版本上构建Julia。在OS X 10.6上,Julia版本会自动使用gcc。在当前系统上,我们建议您如上所述安装命令行工具。较旧的系统没有来自Apple的单独的命令行工具包,这将需要安装完整的Xcode。这种情况下,你至少需要Xcode 4.3.3。在v5.0之前的Xcode中,您可以选择首选项 - >下载并选择命令行工具。这些步骤将确保安装clang v3.1,这是构建Julia所需的最低版本的clang。

第 14 段(可获 2 积分)

如果你在.bashrc或类似文件中设置了LD_LIBRARY_PATH或DYLD_LIBRARY_PATH,Julia可能无法找到与它捆绑在一起的各种库。需要取消设置这些环境变量以使Julia正常工作。

如果你在OpenBLAS中看到构建失败,或者如果你喜欢实验,你可以在vecLib中通过设置USE_SYSTEM_BLAS = 1使用Apple提供的BLAS构建。Julia不使用苹果提供的LAPACK,因为它太旧了。

当构建Julia或其依赖项时,由第三方软件包管理器安装的库可以重定向编译器以使用其所需的不兼容版本的软件。这种情况的一个例子是当一个称为“链接器(linker)”的软件给出“未定义符号(Undefined symbols)”的错误。如果发生这种情况,通常可以从错误文本中的名称中找出导致错误的软件包。这种错误可以通过暂时卸载有问题的包来绕过。如果出错的软件包本身不能卸载,那你可以只卸载开发头(development headers )(例如:在Fink中以“-dev”结尾的包)。

第 15 段(可获 2 积分)

FreeBSD

FreeBSD 9.0,安装gcc47、gitgmake 软件包/端口,然后执行如下命令编译Julia:

$ gmake FC=gfortran47

在FreeBSD上,你必须使用gmake命令而不是make.

Windows

要在Windows上构建Julia,见 README.windows.

Vagrant

Julia可以在一个孤立的Vagrant环境中开发。详见the Vagrant README

 

所需的构建工具和外部库

构建Julia需要安装以下软件:

  • GNU make — 构建依赖关系。
  • gcc & g++ (>= 4.7) 或 Clang (>= 3.1, 在OS X上 Xcode 4.3.3) — 编译和链接C, C++
  • gfortran — 编译和链接Fortran库
  • git — 版本控制和软件包管理(需要1.7.3以上的版本)
  • perl — 库头文件的预处理。
  • wget, curl, 或 fetch (FreeBSD) — 自动下载外部库。
  • m4 — 需要构建GMP.
  • patch — 修改源码。
  • cmake — 需要构建libgit2。
  • openssl — 在Linux上需要libgit2支持HTTPS ,通过apt-get install libssl-devyum install openssl-devel安装。
第 16 段(可获 2 积分)

Julia使用以下外部库,这些库将自动下载(有时包含在Julia源代码库中),然后在第一次运行make时从源代码编译:

  • LLVM (3.7) — 编译器基础设施。
  • FemtoLisp — 与Julia源码一起打包,并用于实现编译器前端。
  • libuv — 便携式,高性能的基于事件的I / O库。
  • OpenLibm — 包含基本数学函数的可移植libm库。
  • OpenSpecFun (>= 0.4) — 包含Bessel的库和复杂参数的错误函数。
  • DSFMT — 快速Mersenne Twister伪随机数生成器库。
  • OpenBLAS — 快速,开放和维护基本的线性代数子程序(BLAS)库,基于Kazushige Goto著名的GotoBLAS
  • LAPACK (>= 3.5) — 线性代数例程库,用于求解线性方程组,线性方程组最小二乘解,特征值问题和奇异值问题。
  • MKL (optional) – OpenBLAS和LAPACK可以由Intel的MKL库替换。
  • AMOS — 用于计算贝塞尔(Bessel)和艾里(Airy)函数的子程序。
  • SuiteSparse (>= 4.1) —稀疏矩阵的线性代数例程库。
  • ARPACK —设计用于解决大型的,稀疏的特征值问题的子程序的集合。
  • FFTW (>= 3.3) — 用于快速高效地计算快速傅立叶变换的库。
  • PCRE (>= 10.00) — Perl兼容的正则表达式库。
  • GMP (>= 5.0) — GNU多精度算术库,需要BigInt支持。
  • MPFR (>= 3.0) — GNU多精度浮点库,用于任意精度浮点(BigFloat)支持。
  • libgit2 (>= 0.21) — Git链接库,由Julia的软件包管理器使用
  • utf8proc (>= 1.3) — 一个用于处理UTF-8编码的Unicode字符串的库
  • libosxunwind — libunwind的克隆库,它是一个确定程序调用链的库
  • Rmath-julia — R项目常用的统计函数库。
第 17 段(可获 2 积分)

有关Julia依赖项的更多概述,请参阅这些幻灯片

 

系统提供的库

如果您的系统上已经安装了一个或多个这些软件包,您可以通过传递USE_SYSTEM _... = 1或者将它添加到Make.user文件中来阻止Julia编译这些库的重复。 可用的标志的完整列表可以在Make.inc中找到。

请注意,此过程不受官方支持,因为它会在依赖关系的安装和版本控制中引入额外的变化,并且仅推荐给系统包维护人员。 因为构建系统不会进行进一步检查以确保安装正确的程序包,这可能会导致意外的编译错误。

第 18 段(可获 2 积分)

SuiteSparse

SuiteSparse是一种特殊情况,因为它通常只作为静态库安装,而USE_SYSTEM_SUITESPARSE = 1要求它是共享库。 运行脚本contrib / repackage_system_suitesparse4.make会将您安装的静态系统SuiteSparse,复制为Julia要求的共享库格式。 make USE_SYSTEM_SUITESPARSE = 1将使用已经复制到Julia目录中的SuiteSparse,但不会从头构建一个新的SuiteSparse库。

英特尔编译器和数学内核函数库(MKL)

要使用英特尔编译器(icc,icpc,ifort)构建Julia,并链接到MKL BLAS和LAPACK库,首先要确保您有最新版本的编译器套件(版本15或更高版本)。

第 19 段(可获 2 积分)

对于64位的架构, 环境应设置如下:

# bash
source /path/to/intel/bin/compilervars.sh intel64

添加以下内容到Make.user文件:

USEICC = 1
USEIFC = 1
USE_INTEL_MKL = 1
USE_INTEL_MKL_FFT = 1
USE_INTEL_LIBM = 1

强烈建议重新拷贝一份新的Julia代码库。

 

源码目录组织

Julia源码的目录组织如下:

base/          Julia标准库源码
contrib/       Julia源码的编辑器支持, 杂项脚本
deps/          外部依赖
doc/manual     用户手册
doc/stdlib     标准库函数帮助说明
examples/      Julia例子程序
src/           Julia核心源码
test/          测试套件
test/perf      基准套件
ui/            前端源码
usr/           Julia标准库加载的二进制文件和共享库
第 20 段(可获 2 积分)

使用二进制包安装

由于现在Julia的开发速度很快,所以我们推荐直接从源码安装Julia的最新版, 但我们也提供针对 下载 指定平台的预编译二进制包。

可以通过两种方式运行Julia 可执行文件,使用上面创建的目录全路径,或者将Julia路径添加到你系统环境变量中,这样就可以在任何地方访问Julia了 (在当前 shell 会话中):

export PATH="$(pwd)/julia:$PATH"

现在就可以这样运行Julia :

julia

在 Windows中, 双击 usr/bin/julia.exe.

第 21 段(可获 2 积分)

如果一切正常工作,你会看到一个Julia标语和一个交互式的命令提示符,你可以在其中输入表达式进行计算。 你可以阅读手册中的getting started

下面的Linux发行版包括Julia,但由于快速的发展,版本可能过时了:

第 22 段(可获 2 积分)

编辑器和终端设置

目前,很多编辑器都支持Julia编辑模式。 虽然Emacs 和Vim 的Julia模式有自己的repos配置文件,但是其他编辑器,例如Textmate,Sublime Text,Notepad ++和Kate,通常放在contrib /目录下。

Julia支持两个主要的IDE:基于 Atom 的 Juno 和作为 Eclipse 插件的 JuliaDT。  IJulia提供了一个 Jupyter笔记本界面。 Sublime-IJulia 插件支持IJulia和Sublime Text之间的交互。

在终端中,Julia极大地利用了控制键(control-key)和元键( meta-key)绑定。 为了使元键绑定更容易访问,许多终端仿真器程序(例如Terminal,iTerm,xterm等)允许您使用alt或option键作为元。 有关更多详细信息,请参阅Julia交互手册中的部分。

第 23 段(可获 2 积分)

文章评论