python管理包管理工具pip和conda使用,及使用pip和conda創建虛擬環境

歡迎大家關注筆者,你的關注是我持續更博的最大動力


原創文章,轉載告知,盜版必究


1 pip的使用


pip是python自帶的一個庫包管理工具,可以通過pip進行python包的安裝、更新、卸載、新建虛擬環境等操作


在命令行下,我們可以查看pip的常用命令如下:

C:\Users\93176>pip -h

Usage:
  pip <command> [options]

Commands:
  install                     Install packages.
  download                    Download packages.
  uninstall                   Uninstall packages.
  freeze                      Output installed packages in requirements format.
  list                        List installed packages.
  show                        Show information about installed packages.
  check                       Verify installed packages have compatible dependencies.
  config                      Manage local and global configuration.
  search                      Search PyPI for packages.
  wheel                       Build wheels from your requirements.
  hash                        Compute hashes of package archives.
  completion                  A helper command used for command completion.
  debug                       Show information useful for debugging.
  help                        Show help for commands.

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment variables and user configuration.
  -v, --verbose               Give more output. Option is additive, and can be used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be used up to 3 times (corresponding to
                              WARNING, ERROR, and CRITICAL logging levels).
  --log <path>                Path to a verbose appending log.
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
  --retries <retries>         Maximum number of retries each connection should attempt (default 5 times).
  --timeout <sec>             Set the socket timeout (default 500.0 seconds).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup,
                              (a)bort.
  --trusted-host <hostname>   Mark this host or host:port pair as trusted, even though it does not have valid or any
                              HTTPS.
  --cert <path>               Path to alternate CA bundle.
  --client-cert <path>        Path to SSL client certificate, a single file containing the private key and the
                              certificate in PEM format.
  --cache-dir <dir>           Store the cache data in <dir>.
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine whether a new version of pip is available for
                              download. Implied with --no-index.
  --no-color                  Suppress colored output
  --no-python-version-warning
                              Silence deprecation warnings for upcoming unsupported Pythons.

C:\Users\93176>

1.1 pip的基礎使用

基礎使用:

  • 安裝庫包
  • 更新庫包
  • 卸載庫包

1.1.1 pip安裝庫包(pip install)

一、pip安裝庫包

1、pip安裝庫包

pip install package_name

2、pip安裝多個庫包,只要庫包的名字用空格隔開即可

pip install package_name1 package_name2 package_name3

3、pip安裝指定版本的庫包(注意使用==

pip install package_name==版本號

4、pip安裝一系列庫包

當要安裝的庫包特別多的時候,如果寫成命令可能也會很多,此時可以把要安裝的庫包名版本號,寫到一個requirements.txt文件下。

例如:requirements.txt中的內容如下:

alembic==0.8.6
bleach==1.4.3
click==6.6
dominate==2.2.1
Flask==0.11.1
Flask-Bootstrap==3.3.6.0
Flask-Login==0.3.2
Flask-Migrate==1.8.1
Flask-Moment==0.5.1
Flask-PageDown==0.2.1
Flask-Script==2.0.5

然後在使用-r參數安裝requirements.txt下的庫包即可。

pip install -r requirements.txt

二、pip install相關的其他參數

在使用pip install的時候,還可以在後面添加其他的參數,使用如下命令查看:

pip install -h

C:\Users\93176>pip install -h

Usage:
  pip install [options] <requirement specifier> [package-index-options] ...
  pip install [options] -r <requirements file> [package-index-options] ...
  pip install [options] [-e] <vcs project url> ...
  pip install [options] [-e] <local project path> ...
  pip install [options] <archive url/path> ...

Description:
  Install packages from:

  - PyPI (and other indexes) using requirement specifiers.
  - VCS project urls.
  - Local project directories.
  - Local or remote source archives.

  pip also supports installing from "requirements files", which provide
  an easy way to specify a whole environment to be installed.

Install Options:
  -r, --requirement <file>    Install from the given requirements file. This option can be used multiple times.
  -c, --constraint <file>     Constrain versions using the given constraints file. This option can be used multiple
                              times.
  --no-deps                   Don't install package dependencies.
  --pre                       Include pre-release and development versions. By default, pip only finds stable
                              versions.
  -e, --editable <path/url>   Install a project in editable mode (i.e. setuptools "develop mode") from a local project
                              path or a VCS url.
  -t, --target <dir>          Install packages into <dir>. By default this will not replace existing files/folders in
                              <dir>. Use --upgrade to replace existing packages in <dir> with new versions.
  --platform <platform>       Only use wheels compatible with <platform>. Defaults to the platform of the running
                              system.
  --python-version <python_version>
                              The Python interpreter version to use for wheel and "Requires-Python" compatibility
                              checks. Defaults to a version derived from the running interpreter. The version can be
                              specified using up to three dot-separated integers (e.g. "3" for 3.0.0, "3.7" for 3.7.0,
                              or "3.7.3"). A major-minor version can also be given as a string without dots (e.g. "37"
                              for 3.7.0).
  --implementation <implementation>
                              Only use wheels compatible with Python implementation <implementation>, e.g. 'pp', 'jy',
                              'cp',  or 'ip'. If not specified, then the current interpreter implementation is used.
                              Use 'py' to force implementation-agnostic wheels.
  --abi <abi>                 Only use wheels compatible with Python abi <abi>, e.g. 'pypy_41'.  If not specified,
                              then the current interpreter abi tag is used.  Generally you will need to specify
                              --implementation, --platform, and --python-version when using this option.
  --user                      Install to the Python user install directory for your platform. Typically ~/.local/, or
                              %APPDATA%\Python on Windows. (See the Python documentation for site.USER_BASE for full
                              details.)
  --root <dir>                Install everything relative to this alternate root directory.
  --prefix <dir>              Installation prefix where lib, bin and other top-level folders are placed
  -b, --build <dir>           Directory to unpack packages into and build in. Note that an initial build still takes
                              place in a temporary directory. The location of temporary directories can be controlled
                              by setting the TMPDIR environment variable (TEMP on Windows) appropriately. When passed,
                              build directories are not cleaned in case of failures.
  --src <dir>                 Directory to check out editable projects into. The default in a virtualenv is "<venv
                              path>/src". The default for global installs is "<current dir>/src".
  -U, --upgrade               Upgrade all specified packages to the newest available version. The handling of
                              dependencies depends on the upgrade-strategy used.
  --upgrade-strategy <upgrade_strategy>
                              Determines how dependency upgrading should be handled [default: only-if-needed]. "eager"
                              - dependencies are upgraded regardless of whether the currently installed version
                              satisfies the requirements of the upgraded package(s). "only-if-needed" -  are upgraded
                              only when they do not satisfy the requirements of the upgraded package(s).
  --force-reinstall           Reinstall all packages even if they are already up-to-date.
  -I, --ignore-installed      Ignore the installed packages, overwriting them. This can break your system if the
                              existing package is of a different version or was installed with a different package
                              manager!
  --ignore-requires-python    Ignore the Requires-Python information.
  --no-build-isolation        Disable isolation when building a modern source distribution. Build dependencies
                              specified by PEP 518 must be already installed if this option is used.
  --use-pep517                Use PEP 517 for building source distributions (use --no-use-pep517 to force legacy
                              behaviour).
  --install-option <options>  Extra arguments to be supplied to the setup.py install command (use like --install-
                              option="--install-scripts=/usr/local/bin"). Use multiple --install-option options to
                              pass multiple options to setup.py install. If you are using an option with a directory
                              path, be sure to use absolute path.
  --global-option <options>   Extra global options to be supplied to the setup.py call before the install command.
  --compile                   Compile Python source files to bytecode
  --no-compile                Do not compile Python source files to bytecode
  --no-warn-script-location   Do not warn when installing scripts outside PATH
  --no-warn-conflicts         Do not warn about broken dependencies
  --no-binary <format_control>
                              Do not use binary packages. Can be supplied multiple times, and each time adds to the
                              existing value. Accepts either :all: to disable all binary packages, :none: to empty the
                              set, or one or more package names with commas between them (no colons). Note that some
                              packages are tricky to compile and may fail to install when this option is used on them.
  --only-binary <format_control>
                              Do not use source packages. Can be supplied multiple times, and each time adds to the
                              existing value. Accepts either :all: to disable all source packages, :none: to empty the
                              set, or one or more package names with commas between them. Packages without binary
                              distributions will fail to install when this option is used on them.
  --prefer-binary             Prefer older binary packages over newer source packages.
  --no-clean                  Don't clean up build directories.
  --require-hashes            Require a hash to check each requirement against, for repeatable installs. This option
                              is implied when any package in a requirements file has a --hash option.
  --progress-bar <progress_bar>
                              Specify type of progress to be displayed [off|on|ascii|pretty|emoji] (default: on)

Package Index Options:
  -i, --index-url <url>       Base URL of the Python Package Index (default https://pypi.tuna.tsinghua.edu.cn/simple).
                              This should point to a repository compliant with PEP 503 (the simple repository API) or
                              a local directory laid out in the same format.
  --extra-index-url <url>     Extra URLs of package indexes to use in addition to --index-url. Should follow the same
                              rules as --index-url.
  --no-index                  Ignore package index (only looking at --find-links URLs instead).
  -f, --find-links <url>      If a url or path to an html file, then parse for links to archives. If a local path or
                              file:// url that's a directory, then look for archives in the directory listing.

General Options:
  -h, --help                  Show help.
  --isolated                  Run pip in an isolated mode, ignoring environment variables and user configuration.
  -v, --verbose               Give more output. Option is additive, and can be used up to 3 times.
  -V, --version               Show version and exit.
  -q, --quiet                 Give less output. Option is additive, and can be used up to 3 times (corresponding to
                              WARNING, ERROR, and CRITICAL logging levels).
  --log <path>                Path to a verbose appending log.
  --proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.
  --retries <retries>         Maximum number of retries each connection should attempt (default 5 times).
  --timeout <sec>             Set the socket timeout (default 500.0 seconds).
  --exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup,
                              (a)bort.
  --trusted-host <hostname>   Mark this host or host:port pair as trusted, even though it does not have valid or any
                              HTTPS.
  --cert <path>               Path to alternate CA bundle.
  --client-cert <path>        Path to SSL client certificate, a single file containing the private key and the
                              certificate in PEM format.
  --cache-dir <dir>           Store the cache data in <dir>.
  --no-cache-dir              Disable the cache.
  --disable-pip-version-check
                              Don't periodically check PyPI to determine whether a new version of pip is available for
                              download. Implied with --no-index.
  --no-color                  Suppress colored output
  --no-python-version-warning
                              Silence deprecation warnings for upcoming unsupported Pythons.

C:\Users\93176>

1.1.2 pip卸載庫包(pip uninstall)

1、直接卸載庫包

pip uninstall package_name

2、直接卸載多個庫包

pip uninstall package_name1 package_name2 package_name3

3、卸載一些列的包

pip uninstall -r requirements.txt

1.1.3 pip升級庫包(pip install --U)

pip升級庫包有兩種方式:

  • pip install -U package_name
  • pip install --upgrade package_name

1.1.4 pip查看已經安裝的庫包(pip list)

1、pip列出所有已經安裝的庫包

pip list

會列出所有已經安裝python庫包的:

  • 庫包的名字
  • 庫包的版本號

2、pip 查詢可升級的庫包

pip list -o

3、pip list的更多參數使用

pip list -h

1.1.5 pip 顯示庫包的相關信息(pip show)

1、pip顯示庫包的相關信息

pip show package_name

C:\Users\93176>pip show pillow
Name: Pillow
Version: 6.2.1
Summary: Python Imaging Library (Fork)
Home-page: http://python-pillow.org
Author: Alex Clark (PIL Fork Author)
Author-email: aclark@python-pillow.org
License: HPND
Location: c:\programdata\anaconda3\lib\site-packages
Requires:
Required-by: visdom, torchvision, streamlit, scikit-image, pytesseract

或列出庫包的如下相關信息:

  • 庫包的名字
  • 庫包的版本
  • 庫包的主頁
  • 庫包的下載位置
  • 庫包的依賴庫等信息

1.1.6 pip搜索庫包(pip search)

查找和某個庫包關鍵字,查找和該關鍵字相關的所有庫包

pip search 待搜索的關鍵字
eg: pip install opencv

1.2 pip其他常用命令

1.2.1 pip虛擬環境中的庫包遷移

1、進入虛擬環境中:

cd virualenv_name
activate

2、把虛擬環境中庫包版本寫到requirements.txt文件中

(venv)$pip freeze >requirements.txt

3、當要創建一個虛擬相同的副本,可以創建一個虛擬環境,然後運行如下命令:

(venv)$pip install -r requirements

1.3 pip使用鏡像下載、更新庫包

1.3.1 臨時使用:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch

常用的國內鏡像源:

清華鏡像源:http://pypi.douban.com/simple/
豆瓣鏡像源:http://pypi.douban.com/simple/
阿里雲鏡像源:http://mirrors.aliyun.com/pypi/simple/
中國科學技術大學鏡像源: http://pypi.mirrors.ustc.edu.cn/simple/
華中理工大學鏡像源:http://pypi.hustunique.com/
山東理工大學鏡像源:http://pypi.sdutlinux.org/

1.3.2 一勞永逸的做法:

一、windows下添加鏡像源配置

在用戶目錄下修改pip\pip.ini文件(我的用戶目錄:C:\Users\93176\pip\pip.ini)更改下載源地址,在pip.ini文件中添加如下兩行代碼即可:

 [global]
 index-url = https://pypi.tuna.tsinghua.edu.cn/simple

也可以在pip.ini文件中加入timeout = 500在網絡不好的時候,防止下載等待時間過短而中斷,可以設置超時時間。
參考

二、linux下添加鏡像源配置

linux下,修改 ~/.pip/pip.conf (沒有就創建一個), 修改 index-url至tuna,內容如下:

 [global]
 index-url = https://pypi.tuna.tsinghua.edu.cn/simple

2 pip創建虛擬環境

2.1 pip在windows上創建虛擬環境

2.1.1 安裝virtualenv

打開windows的命令行,安裝virtualenv,virtualenv是創建python虛擬環境的一個工具

pip installl virtualenv

pip install virtualenvwrapper # 這是對virtualenv的封裝版本,一定要在virtualenv後安裝

安裝完之後,輸入pip list可以查看到安裝的上面兩個庫包

2.1.2 使用virtualenv創建虛擬 環境

1、創建一個虛擬環境

virtualenv envname

如果安裝了多個python版本,如py2和py3,需要指定使用哪個創建虛擬環境
virtualenv -p python2 envname

此時會創建一個虛擬環境名字爲:envname也是envname文件夾),然後在envname文件夾下有四個文件夾:

  • Include
  • Lib:之後虛擬環境中安裝的庫包都會安裝到這裏
  • Scripts
  • tcl

2、啓動虛擬環境

cd envname # 進入虛擬環境文件夾
cd Scripts # 進入相關啓動文件夾
activate # 啓動虛擬環境

3、退出虛擬環境

deactivate

具體操作實例:

E:\pip_env>virtualenv opencv3
E:\pip_env>cd opencv3

E:\pip_env\opencv3>dir
2019/10/13  21:08    <DIR>          Include
2020/04/11  11:52    <DIR>          Lib
2020/04/11  12:16    <DIR>          Scripts
2020/04/11  11:52    <DIR>          tcl

E:\pip_env\opencv3>cd Scripts
E:\pip_env\opencv3\Scripts>dir
2020/04/11  12:16             2,301 activate
2020/04/11  12:16               871 activate.bat
2020/04/11  12:16             1,755 activate.ps1
2020/04/11  12:16             1,152 activate.xsh
2020/04/11  12:16             1,517 activate_this.py
2020/04/11  12:16               510 deactivate.bat
2020/04/11  11:53           102,776 easy_install-3.6.exe
2020/04/11  11:53           102,776 easy_install.exe
2020/04/11  11:53           102,767 pip.exe
2020/04/11  11:53           102,767 pip3.6.exe
2020/04/11  11:53           102,767 pip3.exe
2020/04/11  11:52            93,696 python.exe
2020/04/11  11:52            51,200 python3.dll
2020/04/11  11:52         3,603,456 python36.dll
2020/04/11  11:52            92,160 pythonw.exe
2020/04/11  11:53           102,754 wheel.exe

E:\pip_env\opencv3\Scripts>activate
# 進入虛擬環境
(opencv3) E:\pip_env\opencv3\Scripts>
# 退出虛擬環境
(opencv3) E:\pip_env\opencv3\Scripts>deactivate
E:\pip_env\opencv3\Scripts>

參考:https://www.cnblogs.com/cwp-bg/p/python.html

2.2 pip在linux上創建虛擬環境

linux中使用virtualenv安裝虛擬環境和windows中一樣

3 pip使用中出現的問題

3.1 pip安裝出現問題

3.1.1 pip安裝超時

pip安裝超時,一般是由於網絡的不好,導致長時間請求未能下載安裝包,解決方法時添加--timeout,默認值爲500 seconds,你可以試着更大一些。

1、臨時設置超時參數

pip install --timeout 600 package_name

2、永久配置超時參數

在上面的提到下載時,在配置文件中添加鏡像源,我們只要在配置文件再添加一行代碼即可:

timeout 700

超時時間可以自己設置,這樣就可以實現永久配置


3 conda的基礎使用

3.1 conda的基礎使用

1.2 conda常用的命令。
1)conda list 查看安裝了哪些包。
2)conda env list 或 conda info -e 查看當前存在哪些虛擬環境
3)conda update conda 檢查更新當前conda

3.1.1 conda安裝庫包(conda install)

conda install package_name

3.1.2 conda卸載庫包(conda uninstall)

conda uninstall package_name

3.1.3 conda升級庫包(conda update)

conda update package_name

3.1.4 conda查看已經安裝的庫包(conda list)

conda list

查看指定的某一個庫包的版本信息

conda list package_name

3.1.5 conda搜索庫包有哪些版本(conda search)

conda search package_name

3.2 conda的其他常用命令

3.2.1 conda批量導出導出依賴包並批量安裝

1、conda批量導出依賴包

conda list -e > requirements.txt

比如如果有一個虛擬環境,就可以直接把虛擬環境中所有庫包的版本信息導出到requirements.txt文件中(記住:要先切換到虛擬環境中),然後在使用下面的命令進行批量安裝,就可以快速復刻一個一模一樣的虛擬環境。

2、conda批量安裝依賴包

conda install --yes --file requirements.txt

3.2.2 更新conda的版本

conda update -n base conda

3.2.3 conda查看、添加、刪除鏡像源

1、conda查看鏡像源

conda config --show-source

2、conda添加鏡像源

如下我們添加清華的鏡像源:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/

添加第三方的庫([參考],例如添加Pytorch(https://blog.csdn.net/qq_29007291/article/details/81103603)):

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/

添加中科大鏡像源

conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/
conda config --set show_channel_urls yes

也可以在配置文件中修改鏡像源,將以上配置文件寫在~/.condarc

vim ~/.condarc # LInux環境下

channels:
  - https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
  - https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - defaults
show_channel_urls: true

讓添加的鏡像生效:

conda config --set show_channel_urls yes

3、刪除鏡像源

conda config --remove-key channels

刪除指定的鏡像源:

conda config --remove channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/'

4 conda創建虛擬環境

4.1 conda在linux、windows上創建虛擬環境

首先在所在系統中安裝Anaconda。可以打開命令行輸入conda -V檢驗是否安裝以及當前conda的版本。

1、創建python虛擬環境

conda create -n your_env_name python=X.X(2.7、3.6等)

  • 創建python版本爲X.X
  • 虛擬環境的名字爲:your_env_name
  • your_env_name文件可以在Anaconda安裝目錄envs文件下找到。

2、使用激活(或切換不同python版本)的虛擬環境

打開命令行輸入python --version可以檢查當前python的版本。

激活虛擬環境

使用如下命令即可 激活你的虛擬環境(即將python的版本改變)。

Linux: source activate your_env_name(虛擬環境名稱)

Windows: activate your_env_name(虛擬環境名稱)

使用python --version 或 python -V可以檢查當前python版本是否爲想要的。
也可以用pip -V 查看當前python的版本和python安裝包的路徑,如下:
在這裏插入圖片描述

3、退出虛擬環境

Linux: source deactivate

Windows: deactivate

注意:
當你退出虛擬環境可能出現如下錯誤:

(base) zpp@estar-cvip:~$ source activate mmlab
(mmlab) zpp@estar-cvip:~$ source deactivate
-bash: deactivate: 沒有那個文件或目錄

此時你可以選擇使用conda退出虛擬環境:

conda deactivate # 一般要求conda的版本在4.0以上

當然也可以使用conda activate env_name激活虛擬環境

4、刪除虛擬環境

使用命令conda remove -n your_env_name(虛擬環境名稱) --all, 即可刪除。

更多和移除命令相關參數可以通過:conda remove -h 查看
在這裏插入圖片描述

刪除環境中的某個包

使用命令conda remove --name your_env_name package_name 即可。

4.2 對虛擬環境中安裝額外的包。

使用命令conda install -n your_env_name [package]即可安裝package到your_env_name中

4.3 conda刪除虛擬環境

conda remove -n env_name --all

5 用conda創建cuda和cudnn

  1. cd到安裝包所在目錄,安裝:bash Anaconda3-5.1.0-Linux-x86_64.sh

  2. 創建虛擬環境:conda create -n your_env_name python=3.6

  3. 激活虛擬環境:source activate your_env_name

  4. 添加conda國內鏡像:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes

  1. 安裝cuda和cudnn

安裝cuda:conda install cudatoolkit=8.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/

安裝cudnn:conda install cudnn=7.0.5 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/

cuda&cudnn

安裝的cuda和cudnn在虛擬環境中的位置

安裝conda完成後,輸入conda list,若出現未找到命令,則需修改環境變量:export PATH=~/anaconda3/bin:$PATH(此法每次開機後都要修改,也可修改配置文件永久生效)

每個不同鏡像網站裏面包含各種不同的下載包,可根據自己的需求打開查找對應的安裝包,
如cudatoolkit 8.0.3 在https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/內,
則安裝命令如:conda install cudatoolkit=8.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/ 即可。

在這裏插入圖片描述



在這裏插入圖片描述


在這裏插入圖片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章