• python环境准备


    一、环境准备。 

    1.安装python3.5.2(勾选环境变量),python2.7.12
    2.设置环境变量 (要求命令行输入python,进入python2命令行,打python3时,进入python3环境):
    a.到python3.5安装目录,直接修改python.exe为python3.exe,scripts的pip3.exe留下,pip.exe删除
    加入python27路径到环境变量里
    python进入2.7 python3进入3.5.2
    pip -V执行2.7的pip
    pip3 -V显示
    C:Usersshawn>pip3 -V
    Fatal error in launcher: Unable to create process using '"'
    处理: 
    C:Usersshawn>python3 -m pip install -U pip 
    Collecting pip 
      Using cached pip-8.1.2-py2.py3-none-any.whl 
    Installing collected packages: pip 
      Found existing installation: pip 8.1.1 
        Uninstalling pip-8.1.1: 
          Successfully uninstalled pip-8.1.1 
    Successfully installed pip-8.1.2 

    二、课程资料 :

    Python环境搭建
    windows
    Python环境搭建(Windows环境下)
    Python下载
    www.python.org官网
    选择可执行文件( 64位3.5.2Windows x86-64 executable installer或32位3.5.2 Windows x86 executable installer)、(64位2.7.12 Windows x86-64 MSI installer或32位2.7.12 Windows x86 MSI installer)
    Python安装,包括Python2和Python3。如何在本地配置双版本环境。引申到工作中的生产环境该怎么处理python版本问题。
    推荐安装路径为C:Python27和C:Python35,因为如果路径有空格的话(C:Program FilesPython35)pip可能会有问题.
    比如:将C:Python35python.exe修改为python3.exe,C:Python35Scriptspip.exe改为pip3.exe,如果已经有pip3.exe,就把pip.exe删除。
    以后需要使用Python3的环境就在终端输入python3就行(输入python就是python2.7的环境),同理pip3就是使用python3的pip
    上面改好之后pip可能会出问题(终端输入>pip3 报错如下:Fatal error in launcher: Unable to create process using '"'),需要升级一下对应的pip3(终端输入>python3 -m pip install -U pip)
    关于pip的介绍,类似yum。以前旧版本的Python可能还要单独装pip,现在Python都是自带pip,无需单独安装pip。
    环境变量的设置
    计算机(我的电脑此电脑)>右键>属性>高级系统设置>环境变量>系统变量

    Centos7 python2和python3共存
    注意事项:
    1、非root帐号加上sudo
    2、centos7自带Python 2.7.5是不能卸载的,很多系统级软件依赖这个

    安装依赖
    # yum -y groupinstall "Development tools"
    # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

    下载python3,我的是Python-3.4.2.tgz
    # wget https://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
    # mkdir /usr/local/python3 
    # tar -zxvf Python-3.4.2.tgz
    # cd Python-3.4.2
    # ./configure --prefix=/usr/local/python3
    # make && make install
    # ln -s /usr/local/python3/bin/python3 /usr/bin/python3

    测试
    查看版本
    # python3
    Python 3.4.2 (default, Jul 19 2016, 03:47:32) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 


    代码测试
    在当前目录新建个python脚本hello.py
    内容:
    #!/usr/bin/python3
    # 第一个注释
    print ("Hello, Python3!") 
    执行
    # python3 hello.py

    Hello, Python3!

    三、Pycharm使用秘籍 

    Pycharm基本使用
    
    Pycharm的基本使用
    在Pycharm下为你的Python项目配置Python解释器
    Project:当前项目名>Project Interpreter>add Local
    在Pycharm下创建Python文件、Python模块
    File>New>Python File
    File>New>Python Package
    使用Pycharm安装Python第三方模块
    Project:当前项目名>Project Interpreter>点击右侧绿色小加号
    Pycharm基本设置,例如不使用tab、tab=4空格、字体、字体颜色、主题、脚本头设置、显示行号等。如何导出和导入自定义设置。
    不使用tab、tab=4空格:Editor>Code Style>Python
    字体、字体颜色:Edit>Colors & Fonts>Python
    关闭自动更新:Appearance & Behavior>System Settings>Updates
    脚本头设置:Edit>File and Code Templates>Python Script 注:其他类似
    显示行号:Edit>General>Appearance>Show line numbers 注:2016.2默认显示行号
    右侧竖线是PEP8的代码规范,提示一行不要超过120个字符
    导出、导入你自定义的配置: File>Export Settings、Import Settings
    常用快捷键,例如复制当前行、删除当前行、批量注释、缩进、查找和替换。
    常用快捷键的查询和配置:Keymap
    Ctrl + D:复制当前行
    Ctrl + E:删除当前行
    Shift + Enter:快速换行
    Ctrl + /:快速注释(选中多行后可以批量注释)
    Tab:缩进当前行(选中多行后可以批量缩进)
    Shift + Tab:取消缩进(选中多行后可以批量取消缩进)
    Ctrl + F:查找
    Ctrl + H:替换
    Pycharm安装插件,例如Markdown support、数据库支持插件等。
    Plugins>Browse repositories(下方三个按钮中间那个)>搜索‘markdown support’>install
    右上角View有三个选项可选,一般我们都用中间那个左侧编写,右侧实时预览
    Git配置?
    需要本地安装好Git
    Version Control>Git
    配置了Git等版本控制系统之后,可以很方便的diff查看文件的不用
    常用操作指南。例如复制文件路径、在文件管理器中打开、快速定位、查看模块结构视图、tab批量换space、TODO的使用、Debug的使用。
    复制文件路径:左侧文件列表右键选中的文件>Copy Path
    在文件管理器中打开:右键选中的文件>往下找到Show In Explorer
    快速定位:Ctrl + 某些内建模块之后,点击在源文件中展开
    查看结构:IDE左侧边栏Structure 查看当前项目的结构
    tab批量换space:Edit>Convert Indents
    TODO的使用:# TODO 要记录的事情
    Debug设置断点,直接点击行号与代码之间的空白处即可设置断点(视频里忘了说)
    Tab页上右键>Move Right(Down),把当前Tab页移到窗口右边(下边),方便对比
    文件中右键>Local History能够查看文件修改前后的对比
    IDE右下角能看到一些有用的信息,光标当前在第几行的第几个字符、当前回车换行、当前编码类型、当前Git分支
    IDE右侧边栏>Database
    如何去掉烦人的波浪线?PEP8又是什么?
    单独一行的注释:#+1空格+注释内容
    代码后跟着的注释:2空格+#+1空格+注释内容
    SSH Terminal: Default encoding:UTF-8
    Settings>Tools>SSH Terminal>最后一行Default encoding:选择UTF-8
    善用搜索!善用搜索!善用搜索!
    遇到不懂问题,先自己搜索。这样才记得更牢!
    推荐使用sogou英文搜索http://english.sogou.com/
    课程资料
    ctrl+d,快速复制光标所在行。 
    ctrl+y,快速删除光标所在行。 
    shift+enter快速换行。 
    ctrl+/快速注释 
    shift+tab,恢复缩进 
    ctrl+f查找 
    ctrl+h替换 
    Ctrl / 
    注释(取消注释)选择的行 
    Shift + Enter 
    开始新行 
    Ctrl + Enter 
    智能换行 
    TAB Shift+TAB 
    缩进/取消缩进所选择的行 
    Ctrl + Alt + I 
    自动缩进行 
    Ctrl + Y 
    删除当前插入符所在的行 
    Ctrl + D 
    复制当前行、或者选择的块 
    Ctrl + Shift + J 
    合并行 
    Ctrl + Shift + V 
    从最近的缓存区里粘贴 
    Ctrl + Delete 
    删除到字符结尾 
    Ctrl + Backspace 
    删除到字符的开始 
    Ctrl + NumPad+/- 
    展开或者收缩代码块 
    Ctrl + Shift + NumPad+ 
    展开所有的代码块 
    Ctrl + Shift + NumPad- 
    收缩所有的代码块 
    装markdown support插件 
    复制文件路径 
    tab批量转换space,edit->Convert Indents 
    TODO 
    遵守PEP8风格 
    settings->tools->ssh terminal默认设置成utf8 

    3.x无中文编码烦恼

    2.x写中文,必须先声明#_*_coding:utf8_*_ 
     

    四、pycharm使用进阶

    Pycharm基本使用
    1. Pycharm的基本使用
    1. 在Pycharm下为你的Python项目配置Python解释器
    1. Project:当前项目名>Project Interpreter>add Local
    2. 在Pycharm下创建Python文件、Python模块
    1. File>New>Python File
    2. File>New>Python Package
    3. 使用Pycharm安装Python第三方模块
    1. Project:当前项目名>Project Interpreter>点击右侧绿色小加号,如图的地方可以加载第三方的库

    如豆瓣、阿里的库等。


    4. Pycharm基本设置,例如不使用tab、tab=4空格、字体、字体颜色、主题、脚
    本头设置、显示行号等。如何导出和导入自定义设置。
    1. 设置菜单字体大小:Appearance&Behavior>Appearance

    勾选Override default fonts by (not recommended)


    2. 设置Console&Terminal字体大小: Editor>Colors&Fonts>Console Font
    3. 不使用tab、tab=4空格:Editor>Code Style>Python
    4. 字体、字体颜色:Edit>Colors & Fonts>Python
    5. 关闭自动更新:Appearance & Behavior>System Settings>Updates
    6. 脚本头设置:Edit>File and Code Templates>Python Script 注:其他
    类似
    7. 显示行号:Edit>General>Appearance>Show line numbers 注:
    2016.2默认显示行号
    8. 右侧竖线是PEP8的代码规范,提示一行不要超过120个字符
    9. 导出、导入你自定义的配置: File>Export Settings、Import Settings
    5. 常用快捷键,例如复制当前行、删除当前行、批量注释、缩进、查找和替换。
    1. 常用快捷键的查询和配置:Keymap
    1. Ctrl + D:复制当前行
    2. Ctrl + E:删除当前行
    3. Shift + Enter:快速换行
    4. Ctrl + /:快速注释(选中多行后可以批量注释)
    5. Tab:缩进当前行(选中多行后可以批量缩进)
    6. Shift + Tab:取消缩进(选中多行后可以批量取消缩进)
    7. Ctrl + F:查找
    8. Ctrl + H:替换
    2. 设置快捷键
    1. 设置修改字体大小的快捷键
    6. Pycharm安装插件,例如Markdown support、数据库支持插件等。
    1. Settings > Plugins >Browse repositories(下方三个按钮中间那个)>搜
    索‘ markdown support ’> install
    2. 右上角View有三个选项可选,一般我们都用中间那个左侧编写,右侧实
    时预览
    7. Git配置?
    1. 需要本地安装好Git
    2. Version Control>Git
    3. 配置了Git等版本控制系统之后,可以很方便的diff查看文件的不用
    4. 配置github
    8. 常用操作指南。例如复制文件路径、在文件管理器中打开、快速定位、查看模
    块结构视图、tab批量换space、TODO的使用、Debug的使用。
    1. 复制文件路径:左侧文件列表右键选中的文件>Copy Path
    2. 在文件管理器中打开:右键选中的文件>往下找到Show In Explorer
    3. 快速定位:Ctrl + 某些内建模块之后,点击在源文件中展开
    4. 查看结构:IDE左侧边栏Structure 查看当前项目的结构
    5. tab批量换space:Edit>Convert Indents
    6. TODO的使用:# TODO 要记录的事情
    7. Debug设置断点,直接点击行号与代码之间的空白处即可设置断点
    8. Tab页上右键>Move Right(Down),把当前Tab页移到窗口右边(下
    边),方便对比
    9. 文件中右键>Local History能够查看文件修改前后的对比
    10. IDE右下角能看到一些有用的信息,光标当前在第几行的第几个字符、
    当前回车换行、当前编码类型、当前Git分支
    11. IDE右侧边栏>Database
    9. 如何去掉烦人的波浪线?PEP8又是什么?
    1. 单独一行的注释:#+1空格+注释内容
    2. 代码后跟着的注释:2空格+#+1空格+注释内容
    10. SSH Terminal: Default encoding:UTF-8
    1. Settings>Tools>SSH Terminal>最后一行Default encoding:选择UTF-8
    11. Live Templates(善用live templates提高开发效率)
    1. Settings>Editor>Live Templates
    12. 善用搜索!善用搜索!善用搜索!
    1. 遇到不懂问题,先尝试自己解决。这样才记得更牢!
    2. 推荐使用sogou英文搜索 http://english.sogou.com/
    紫金葫芦 整理于2016-08-02,2016-12-11更新

    五、其它配置(来自知乎问题(同时装了Python3和Python2,怎么用pip?)整理

    作者:匿名用户
    链接:https://www.zhihu.com/question/21653286/answer/95532074
    来源:知乎
    著作权归作者所有,转载请联系作者获得授权。

    官方的解法是什么?


    事实上这个问题几年以前Python社区就给出了官方解决方案,只不过国内一直没有注意到罢了。


    我们在安装Python3(>=3.3)时,Python的安装包实际上在系统中安装了一个启动器py.exe,默认放置在文件夹C:Windows下面。这个启动器允许我们指定使用Python2还是Python3来运行代码(当然前提是你已经成功安装了Python2和Python3)。


    有关Python2和3的安装,可以参见Python部落()-->影音学堂-->《0基础1小时,Python入门》的第一节。


    如果你有一个Python文件叫 hello.py,那么你可以这样用Python2运行它


    py -2 hello.py


    类似的,如果你想用Python3运行它,就这样


    py -3 hello.py


    去掉参数 -2/-3


    每次运行都要加入参数-2/-3还是比较麻烦,所以py.exe这个启动器允许你在代码中加入说明,表明这个文件应该是由python2解释运行,还是由python3解释运行。说明的方法是在代码文件的最开始加入一行


    #! python2


    或者


    #! python3


    分别表示该代码文件使用Python2或者Python3解释运行。这样,运行的时候你的命令就可以简化为


    py hello.py


    使用pip


    当Python2和Python3同时存在于windows上时,它们对应的pip都叫pip.exe,所以不能够直接使用 pip install 命令来安装软件包。而是要使用启动器py.exe来指定pip的版本。命令如下:


    py -2 -m pip install XXXX


    -2 还是表示使用 Python2,-m pip 表示运行 pip 模块,也就是运行pip命令了。如果是为Python3安装软件,那么命令类似的变成


    py -3 -m pip install XXXX


    #! python2 和 # coding: utf-8 哪个写在前面?


    对于Python2用户还有另外一个困惑,Python2要在代码文件顶部增加一行说明,才能够在代码中使用中文。如果指明使用的Python版本也需要在文件顶部增加一行,那哪一行应该放在第一行呢?


    #! python2 需要放在第一行,编码说明可以放在第二行。所以文件开头应该类似于:

    #! python2
    # coding: utf-8
    

    有了这些技巧,Python2和Python3就可以愉快地在一起玩耍了~


    Python标准:PEP 397 -- Python launcher for Windows

    作者:Johnny Wong
    链接:https://www.zhihu.com/question/21653286/answer/96834584
    来源:知乎
    著作权归作者所有,转载请联系作者获得授权。

    ## 对于 Linux ##
    sudo pip install sth
    # 或者明确版本
    sudo pip2 install sth
    sudo pip3 install sth
    
    ## 对于 Windows NT ##
    
    # 如果仅安装 python2
    pip install sth
    
    # 如果安装有 python3, 则需要明确 pip 版本
    py -2 -m pip install sth
    py -3 -m pip install sth 
    


    == update, 针对 Linux ==
    在 pip, pip2, 或者 pip3 install 失败时,可以尝试如下操作:
    # 以安装 youtube-dl 举例, proxy_host:proxy_port 为代理地址
    
    export https_proxy=proxy_host:proxy_port
    sudo -H  pip install --upgrade youtube-dl
    # 或 sudo -H  pip2 install --upgrade youtube-dl
    # 或 sudo -H  pip3 install --upgrade youtube-dl
    

    pip 配置不好很影响 python 使用(的心情),但愿大家少走弯路。

    == 我的 update 跟别人不一样 ==
    将上面的命令改写为脚本,有哪些好用的bash 技巧(包括不限于快捷键、自用小脚本)?
    function whereip()
    {
    argument=${1:-"where"}
    case $argument in
    where|ip|whereip|show)
    	curl --silent http://ip.cn 2>&1;;
    proxy|world|global)
    	export HTTPS_PROXY=http://127.0.0.1:8087
    	export HTTP_PROXY=http://127.0.0.1:8087
    	export ALL_PROXY=http://127.0.0.1:8087
    	echo "Setup Proxy Completed."
    	;;
    noproxy|unproxy|local|china)
    	unset HTTPS_PROXY
    	unset HTTP_PROXY
    	unset ALL_PROXY
    	echo "Cancel Proxy Completed."
    	;;
    *)
    	echo "whereip show|proxy|noproxy";;
    esac
    }
    
    写入 bashrc 或 zshrc,配以代理 8087 (根据实际情况,你可能需要将其修改为正确的地址)
    在你 pip 遇到困难的途中,也许这条信息可以给你帮助!
     
    作者:洪宸
    链接:https://www.zhihu.com/question/21653286/answer/97950092
    来源:知乎
    著作权归作者所有,转载请联系作者获得授权。

    一步步教你打造Python 和 Python3 并存的环境:
    为了回答这个问题,特意跑到一台 CentOS 6.5 上装了一个 Python3(手头没有 Ubuntu 的环境),然后又装了一个 pip,通过ln创建连接、alias创建别名这些操作,证明Python2 和 Python3 还是可以完美并存的。
    题主的问题不在于能不能并存,而在于用默认的 pip install 命令给Python3 安装这个做法本身就是错误的,下面是我的解决方案:

    环境上之前已经有了 Python 和 pip,
    # python --version:
    Python 2.7.9
    # pip --version
    pip 8.1.1 from /usr/local/lib/python2.7/site-packages (python 2.7)
    

    安装了 Python3 之后,创建一个软链接 /usr/bin/python3,
    # ln -s /usr/local/python3/bin/python3 /usr/bin/python3
    # which python3
    /usr/bin/python3
    # ll /usr/bin/python3
    lrwxrwxrwx. 1 root root 30 4月  28 20:46 /usr/bin/python3 -> /usr/local/python3/bin/python3
    

    这样就可以直接使用 python3 命令了。
    # python3 --version
    Python 3.5.1
    

    接着我用 Python3 装了个pip。之前有人说用pip3升级又会变成pip,所以我开始装的是一个1.5.4版本的。
    # which pip3
    /usr/bin/which: no pip3 in (/usr/lib/java/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
    # ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
    # pip3 --version
    pip 1.5.4 from /usr/local/python3/lib/python3.5/site-packages/pip-1.5.4-py3.5.egg (python 3.5)
    

    那我现在就开始用两个pip进行安装啦,就安装那个 requests 包吧:
    # python
    Python 2.7.9 (default, Dec  1 2015, 14:05:26)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: No module named requests
    >>>
    
    包不存在噢~

    # pip install requests
    Collecting requests
    Downloading requests-2.9.1-py2.py3-none-any.whl (501kB)
    100% |████████████████████████████████| 501kB 945kB/s
    Installing collected packages: requests
    Successfully installed requests-2.9.1
    # python
    Python 2.7.9 (default, Dec  1 2015, 14:05:26)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    >>> requests.get('http://zhihu.com')
    <Response [200]>
    >>>
    

    Python2 下是没问题的,接下来再看 Python3:
    # python3
    Python 3.5.1 (default, Apr 28 2016, 20:38:40)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: No module named 'requests'
    >>>
    
    也是不存在的。
    # pip3 install requests
    Collecting requests
      Using cached requests-2.9.1-py2.py3-none-any.whl
    Installing collected packages: requests
    Successfully installed requests-2.9.1
    # python3
    Python 3.5.1 (default, Apr 28 2016, 20:38:40)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    >>> requests.get('http://zhihu.com')
    <Response [200]>
    >>>
    

    bingo~
    好,我再升级一下 pip3:

    # pip3 install --upgrade pip
    Downloading/unpacking pip from https://pypi.python.org/packages/31/6a/0f19a7edef6c8e5065f4346137cc2a08e22e141942d66af2e1e72d851462/pip-8.1.1-py2.py3-none-any.whl#md5=22db7b6a517a09c29d54a76650f170eb
      Downloading pip-8.1.1-py2.py3-none-any.whl (1.2MB): 1.2MB downloaded
    Installing collected packages: pip
      Found existing installation: pip 1.5.4
        Uninstalling pip:
          Successfully uninstalled pip
    Successfully installed pip
    Cleaning up...
    
    # pip3 --version
    pip 8.1.1 from /usr/local/python3/lib/python3.5/site-packages (python 3.5)
    

    完美升级,并且可用。

    现在再说为什么题主使用 pip install 想给 Python3 安装这个做法是错的:
    看我上面执行了两个 pip --version 命令和 pip3 --version 命令,明确的显示了他们安装包的 site-packages 路径,你默认的 pip 是 Python2 下的,安装的包当然安装不到 Python3 下面。我为什么要在 /usr/bin 下创建一个 pip3 链接,因为同一个目录下,只能存在一个 pip , 已经存在了指向 Python2 的 pip,新来的 pip 就不能再用这个名字,否则覆盖就造成原来 Python2 的 pip 不可用。
    如何解决同名命令的多版本存在的问题呢? 参考我下面的做法:

    python3/pip3 带个数字的命令总觉得不正统,但是不带数字的 python/pip 已经被 Python2 给占用了又想保留他们,那我该怎么办呢? 这个时候就轮到伟大的 alias 上场了:
    # alias pip=/usr/local/python3/bin/pip3
    # pip --version
    pip 8.1.1 from /usr/local/python3/lib/python3.5/site-packages (python 3.5)
    
    此时 再用 pip install 安装的库都将安装到 Python3 的路径下,如果想用 Python2 的 pip , 只需要执行一个 unalias pip 就好了:
    # unalias pip
    # pip --version
    pip 8.1.1 from /usr/local/lib/python2.7/site-packages (python 2.7)
    
    同理,可以把这个用到 python 命令上。
    alias 命令可以写到你的shrc环境变量文件里,这样就不用每次都敲这么一长串命令了。
    (看那个贴官方答案的,每次安装执行那么长一坨命令就不头疼么?)

    另外,那篇[官解]里说脚本头部加上 shebang 行的,个人认为完全没有必要,为什么呢?
    Linux 里面,脚本加上 shebang 并赋予可执行权限,这样通过 "/路径/脚本" 的形式就可以执行脚本了,如果脚本没有赋予可执行权限时,这种方式就无法执行。而用以下这种方式:
    "python /路径/脚本" 或者 "python3 /路径/脚本" 无论有没有赋予脚本权限,无论有没有 shebang 行,脚本都是可以执行的,还是这种方式更直接一些。

    PS: Linux 下面多认识一下 PATH,用好 ln 、alias ,可以帮你解决好多问题 ,有时 virtualenv 也并不需要。
    ☝ᖗ乛◡乛ᖘ☝ 完美
  • 相关阅读:
    CentOS6.3 编译安装LAMP(4):编译安装 PHP5.2.17
    CentOS6.3 编译安装LAMP(3):编译安装 MySQL5.5.25
    解决URL中包含“%2F”导致Apache地址重写mod_rewrite失效的问题
    Apache静态编译与动态编译详解
    Apache常用2种工作模式prefork和worker比较
    Apache 优化配置10条建议
    Apache prefork 模块指令分析
    PHP上传(单个)文件示例
    CentOS6.3 编译安装LAMP(2):编译安装 Apache2.2.25
    CentOS6.3 编译安装LAMP(1):准备工作
  • 原文地址:https://www.cnblogs.com/ld1977/p/6124967.html
Copyright © 2020-2023  润新知