写给程序员的Python教程笔记14——安装第三方包

附录C 安装第三方包

        本节介绍第三方包安装工具pip。

        对于依赖于Numpy或Scipy软件包的数字或科学计算等更多专业用途,你应该考虑使用Anaconda,这是一个强大的pip替代品。

C.1 安装pip

        通常不需要在最近的Python版本中安装pip,因为在安装Python或创建新的虚拟环境时,系统会自动调用ensurepip。如果由于某种原因需要手动安装pip,那么可以简单地调用以下命令:

(palindrome_env) d:\python\写给程序员的Python教程\pyfund\palindrome>python -m ensurepip
Looking in links: c:\Users\letu\AppData\Local\Temp\tmpo2cf5etf
Requirement already satisfied: setuptools in d:\python\写给程序员的python教程\pyfund\palindrome\palindrome_env\lib\site-packages (65.5.0)
Requirement already satisfied: pip in d:\python\写给程序员的python教程\pyfund\palindrome\palindrome_env\lib\site-packages (22.3.1)

        请记住,pip将被安装到你所调用的python解释器的相对应的环境中。

C.2 Python包索引

        pip工具可用于搜索中央资源库(Python包索引,简称PyPl,呢称Cheeseshop)中的软件包,然后下载并安装它们以及它们所依赖的包。

使用pip安装

        通过安装nose测试工具来演示如何使用pip。nose命令是一种强大的测试工具,它会运行基于单元测试的测试用例,例如我们在第10章中开发的那些测试用例。它真正有用的功能就是发现所有的测试并运行它们。这意味着不需要在代码中添加unittest.main(),可以用nose找到并运行测试。

        首先,需要做一些基础工作。创建一个虚拟环境(参考附录B),这样就不会无意中将Python安装到系统中了。使用pyenv创建一个虚拟环境,并激活它:

d:\python\写给程序员的Python教程>python -m venv test_env
d:\python\写给程序员的Python教程>test_env\Scripts\activate
(test_env) d:\python\写给程序员的Python教程>

        由于pip的更新比Python的更频繁,所以在任何新的虚拟环境中升级pip是一个好习惯。

(test_env) d:\python\写给程序员的Python教程>pip install --upgrade pip
Requirement already satisfied: pip in d:\python\写给程序员的python教程\test_env\lib\site-packages (22.3.1)
Collecting pip
  Downloading pip-23.1.2-py3-none-any.whl (2.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 375.7 kB/s eta 0:00:00
ERROR: To modify pip, please run the following command:
d:\python\写给程序员的Python教程\test_env\Scripts\python.exe -m pip install --upgrade pip

[notice] A new release of pip available: 22.3.1 -> 23.1.2
[notice] To update, run: python.exe -m pip install --upgrade pip

        下面用pip来安装nose。pip使用子命令决定要做什么,并使用pip install package-name决定要安装哪个模块:

(test_env) d:\python\写给程序员的Python教程>pip install nose
Collecting nose
  Downloading nose-1.3.7-py3-none-any.whl (154 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 154.7/154.7 kB 711.8 kB/s eta 0:00:00
Installing collected packages: nose
Successfully installed nose-1.3.7

[notice] A new release of pip available: 22.3.1 -> 23.1.2
[notice] To update, run: python.exe -m pip install --upgrade pip

        如果自上次升级以来pip已有新版本可用,而没有升级,那么每次使用它时,它都会发出警告。

(test_env) d:\python\写给程序员的Python教程>python -m pip install --upgrade pip
Requirement already satisfied: pip in d:\python\写给程序员的python教程\test_env\lib\site-packages (22.3.1)
Collecting pip
  Using cached pip-23.1.2-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 22.3.1
    Uninstalling pip-22.3.1:
      Successfully uninstalled pip-22.3.1
Successfully installed pip-23.1.2

        安装成功,可以在虚拟环境中使用nose了。通过在REPL中导入nose并检查它的安装路径来检查它是否可用:

(test_env) d:\python\写给程序员的Python教程>python
Python 3.11.2 (tags/v3.11.2:878ead1, Feb  7 2023, 16:38:35) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import nose
>>> nose.__file__
'd:\\python\\写给程序员的Python教程\\test_env\\Lib\\site-packages\\nose\\__init__.py'

C.3 使用pip安装本地包

        可以使用pip从文件中的本地包进行安装,而不是从Python包索引中安装。要做到这一点,只需将打包的分发包的文件名传递给pip install即可。下面将附录B中构建的palindrome-1.0.zip包安装:

(test_env) d:\python\写给程序员的Python教程\pyfund\palindrome\dist>pip install palindrome-1.0.zip
Processing d:\python\写给程序员的python教程\pyfund\palindrome\dist\palindrome-1.0.zip
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: palindrome
  Building wheel for palindrome (pyproject.toml) ... done
  Created wheel for palindrome: filename=palindrome-1.0-py3-none-any.whl size=1897 sha256=dbde68f9bfc5a0d6a38eba96d116f39539c4654209c4dd6136aee5931c6550df
  Stored in directory: c:\users\letu\appdata\local\pip\cache\wheels\82\7b\5e\c657f3ce1f8e8203a0b32e02e4ce6017025671cd3fe5cbea5a
Successfully built palindrome
Installing collected packages: palindrome
Successfully installed palindrome-1.0

C.4 卸载包

        使用pip安装软件包而不直接调用源码分发中的setup.py的一个关键优点是,pip知道如何制裁软件包。只需使用unistall子命令:

(test_env) d:\python\写给程序员的Python教程\pyfund\palindrome\dist>pip uninstall -r palindrome-1.0.zip
ERROR: Exception:
Traceback (most recent call last):
  File "d:\python\写给程序员的Python教程\test_env\Lib\site-packages\pip\_internal\cli\base_command.py", line 169, in exc_logging_wrapper
    status = run_func(*args)
             ^^^^^^^^^^^^^^^
  File "d:\python\写给程序员的Python教程\test_env\Lib\site-packages\pip\_internal\commands\uninstall.py", line 83, in run
    for parsed_req in parse_requirements(
  File "d:\python\写给程序员的Python教程\test_env\Lib\site-packages\pip\_internal\req\req_file.py", line 148, in parse_requirements
    for parsed_line in parser.parse(filename, constraint):
  File "d:\python\写给程序员的Python教程\test_env\Lib\site-packages\pip\_internal\req\req_file.py", line 335, in parse
    yield from self._parse_and_recurse(filename, constraint)
  File "d:\python\写给程序员的Python教程\test_env\Lib\site-packages\pip\_internal\req\req_file.py", line 340, in _parse_and_recurse
    for line in self._parse_file(filename, constraint):
  File "d:\python\写给程序员的Python教程\test_env\Lib\site-packages\pip\_internal\req\req_file.py", line 371, in _parse_file
    _, content = get_file_content(filename, self._session)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\python\写给程序员的Python教程\test_env\Lib\site-packages\pip\_internal\req\req_file.py", line 549, in get_file_content
    content = auto_decode(f.read())
              ^^^^^^^^^^^^^^^^^^^^^
  File "d:\python\写给程序员的Python教程\test_env\Lib\site-packages\pip\_internal\utils\encoding.py", line 34, in auto_decode
    return data.decode(
           ^^^^^^^^^^^^
UnicodeDecodeError: 'gbk' codec can't decode byte 0xb0 in position 132: illegal multibyte sequence

你可能感兴趣的:(python,笔记,开发语言)