您正在查看: Chris 发布的文章

php页面不能被解析成网页,而是直接显示了页面代码

Overview

之前安装过很多次的phpMyAdmin,但最近一次安装时,出现了一个之前从来没遇到的问题:访问phpMyAdmin时,主页的php页面会被不能被解析成网页,而是直接显示了页面代码。

问题描述

文字描述已经比较清楚了,就不截图了。如果想看截图,参考 phpmyadmin showing php script [duplicate]

对比之前的安装流程,发现这次安装Apache2时,php还没装(这个一般装Ubuntu系统时都会自动装上,这次居然没装,所以才会碰到这么少见的错误),所以php是在Apache2后面安装的。这样的问题在于,当Apache2安装时,没有检测到系统有php,所以就以为用户安装Apache2不是为了运行php网站(尽管Apache2最常见的应用就是做php网站容器,但实际上可以用作多种语言网站的容器,比如perlCGI程序,但需要手动配置添加专门的模块,使Apache2支持perlCGI程序,不然你通过Apache2访问你的perl页面,也会被直接显示为代码,而不是页面,参见配置Apache2服务器以CGI方式运行Perl程序),也就没有安装配置支持php的模块。

解决方案

  • 先安装php,再安装Apache2,这样Apache2安装时,会检测到php,然后自动安装配置好支持php网站的模块。

  • 如果不幸顺序反了(后面又发现,好像跟顺序无关,还是有可能报这个错误 =。=),那使用下面的命令手动给Apache2安装支持php的模块

    先用下面的命令看看你装的php版本:

    php --version
    

    出现下面的信息:

    PHP 7.0.32-0ubuntu0.16.04.1 (cli) ( NTS )
    Copyright (c) 1997-2017 The PHP Group
    Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
        with Zend OPcache v7.0.32-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend    Technologies
    

    如果你装的是php 7.0,那通过下面的命令

    sudo apt-get install libapache2-mod-php7.0
    

    然后重启Apache2

    sudo service apache2 restart
    

    就可以了。

参考文献

在Ubuntu 16.04的R语言环境中通过安装KerasR包使用Keras深度学习框架

Overview

因为想尝试一些深度学习模型,就用Keras开始建模(为什么使用Keras?)。而且由于之前使用的极其模型都是基于R语言的,所以我们依然尝试使用R语言版本的Keras来训练深度学习模型。

KerasR语言接口

Keras本身就是一个基于TensorflowTheano以及CNTK编写的纯Python框架,因为方便易用,所以使用广泛,为了让R语言开发者也能在R中使用KerasTaylor Arnold写了kerasR包,而RStudio公司开发了keras包,关于这两个包的区别,参见keras: Deep Learning in R

这里我使用kerasR包为例,在Ubuntu 16.04的R中安装Keras,并提供一些链接进一步学习使用kerasRKeras

安装过程

安装pip

pip是一个很方面易用的Python包管理工具,使用pip``可以很方便地安装TensorflowKeras`。
使用下面的命令安装:

sudo apt-get install python-pip

默认你已经安装了Python,如果没装Python,使用下面的命令一起装了:

sudo apt-get install python-pip python-dev build-essential 

安装之后查看pip的版本信息:

pip -V

想要升级pip

sudo pip install --upgrade pip 

注意:装了最新版本的pip(或者是升级到最新版本的pip),可能会报错,参考Python包管理软件pip更新后报错

安装Tensorflow

因为Keras本身是Tensorflow运行的机器学习框架,所以安装Keras之前先安装Tensorflow

sudo pip install tensorflow

这里我是用了系统权限sudo,如果没有系统权限,也可以不用。
如果想安装指定版本的Tensorflow,可以用下面的命令安装:

sudo pip install tensorflow==1.2.1

如果想安装GPU版本的Tensorflow,可以用下面的命令安装:

sudo pip install tensorflow-gpu

在安装Tensorflow的过程中可能会报类似于下面的错误:

Cannot uninstall 'enum34'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

这是因为安装Tensorflow需要安装enum34,在安装enum34时需要删除旧的enum34。而在删除旧的enum34时,版本依赖多,不能系统清晰的删除。所以需要手动安装enum34并忽略已经安装的版本:

sudo pip install nibabel --ignore-installed nibabel

然后重新安装Tensorflow就可以了。

安装Keras

sudo pip install keras

安装成功后,打开python命令行,导入一下Tensorflow

>>> import keras as kr
Using TensorFlow backend.

说明Keras已经装好。

安装kerasR

先打开R语言命令行(最后使用sudo,这样可以将R包安装到系统目录):

sudo R

安装kerasR

install.packages("kerasR")

安装成功后,导入kerasR,并检查状态:

library("kerasR")
keras_init()

如果不报错,就说明安装成功。

如果报了类似于下面的错误:

>> keras not available
>> See reticulate::use_python() to set python path, 
>> then use kerasR::keras_init() to retry

就说明要么是KerasTensorflow没装好,要么是R找不到Python的路径。一般来说Python装在系统路径中,不会找不到。以防万一,可以查看下自己的Python路径,手动使用reticulate::use_python()函数加进去。比如在Ubuntu下面,一般是在/usr/bin/python,那就可以用下面的命令安装:

reticulate::use_python("/usr/bin/python")

使用kerasR

安装好之后,可以参考下面的链接来在真实数据集上运行几个例子:

因为kerasR只是Keras的一个R语言接口,所以使用kerasR之前还是要对Keras有一些了解。可以查看下面的链接快速了解Keras

如果想快速上手一些Keras模型,可以查看下面的链接:

参考文献

Python包管理软件pip更新后报错

Overview

今天在服务器(Ubuntu 16.04)使用pip安装深度学习包Keras的时候,发现安装结束之后下面有一行提示小字,大约就是pip有新版本可以更新,使用XXX命令更新,就顺带更新了一下,更新完了pip就不能用了...

问题描述

及时是查看下pip的版本

sudo pip --version

也会报下面的错误:

Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main

解决方案

差了很多资料,发现是pip新版本的一个bug,跟平台无关,Windows下也会出现这个问题(可以查看这里ImportError: cannot import name main when running pip --version command in windows7 32 bit)。

有3个解决办法:

  1. 直接修复这个bug,算是临时的解决方案。
    vim编辑/usr/bin/pip文件

     sudo vim /usr/bin/pip
    

    可以看到下面的内容

     from pip import main
     if __name__ == '__main__':
         sys.exit(main())
    

    把这部分内容注释掉,换成下面的内容:

    from pip import __main__
    if __name__ == '__main__':
        sys.exit(__main__._main())
    

    重新运行pip,不在报错了。

  2. Windows下的pip安装位置不太熟悉,所以不知道应该在哪里修改这个文件。如果不知道在哪里修改,也可以考虑用python命令讲pip降级到没有bug的版本:

    python -m pip uninstall pip
    python -m pip install pip==9.0.3
    

    这个没试过,不知道行不行。

  3. 也有人说这个bug是由pip的调用方式引起的,在调用pip时,别用:

    pip install <package>
    

    而是改用(python2):

    python -m pip install <package>
    

    或者(python3):

    python3 -m pip install <package>
    

参考文献

R脚本在Windows和Mac上的一点不兼容

Overview

今天在Mac上运行一个在Windows中处理过的R脚本,不能正常运行,错误信息指向明确。

问题描述

使用./H_gr500_tune.R运行,报下面的错误:

env: Rscript\r: No such file or directory

打开这个脚本,头几行内容如下:

#!/usr/bin/env Rscript
library(e1071)
library(plyr)
library(ROCR)

并没有发现异常,很明显是因为Windows下换行符\r\n引起的,但是使用sublime查找这个脚本,能查找\n,却查不到有\r,所以没办法在sublime中手动去掉\r
可能sublime在显示的时候自动把\r\n处理成了\n,但脚本中\r确实是存在的,所以尽管看不到,但运行脚本时会报错。

解决方案

使用下面的命令行,去掉\r,并生成一个新文件H_gr500_tune1.R

cat H_gr500_tune.R | tr -d "\r" > H_gr500_tune1.R

重新运行H_gr500_tune1.R,一切正常。

小结

Windows下拿过来的脚本,最好都check一下换行符的问题,不管会不会有问题,看一下总没错...

一个R语言版本跟caret包不兼容的问题

Overview

最近在一台新的电脑上运行一个R脚本时,报了一个很奇怪的错误。因为类似的脚本已经运行了很多次,所以很快就可以确定是电脑的R环境不兼容引起的问题。

问题描述

脚本在运行时需要载入caret包,结果载入过程中报下面的错误:

Loading required package: gplots

Attaching package: ‘gplots’

The following object is masked from ‘package:stats’:

    lowess

Loading required package: methods
Warning message:
package ‘gplots’ was built under R version 3.2.4
Loading required package: lattice
Loading required package: ggplot2
Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]) :
  there is no package called ‘recipes’
In addition: Warning messages:
1: package ‘caret’ was built under R version 3.2.5
2: package ‘lattice’ was built under R version 3.2.5
3: package ‘ggplot2’ was built under R version 3.2.5
4: replacing previous import by ‘plyr::ddply’ when loading ‘caret’
Error: package or namespace load failed for ‘caret’
Execution halted

别被上面的信息迷惑了,里面出现了ggplot2lattice包,是因为这些包都是caret的依赖包。caret非常的大,有很多依赖包。看到上面的信息,第一时间会选择用install.packages("recipes")安装,但提示信息时recipes不存在。

解决方案

查阅了一些资料后,发现caret兼容的最低R语言版本为3.2.3,然后我看了下我的R语言版本:3.2.2...
R官网上,下载了一个3.3.3,安装之后,重新装了一下需要的包,一切正常。

小结

如果安装的环境太老,有的时候还是会有一些不兼容的问题。所以如果出现了一些重大的版本,最好还是要更新一下,因为很可能后面的包就开始基于新的版本开发了。虽然我也不喜欢追求最新的,但也别太旧...