【问题标题】:Does python pip have the equivalent of node's package.json?python pip 是否具有等效于节点的 package.json 的功能?
【发布时间】:2018-08-03 02:41:39
【问题描述】:

在 NodeJS 的 npm 中,您可以创建一个 package.json 文件来跟踪您的项目依赖关系。当您想要安装它们时,您只需运行 npm install,它会查看您的包文件并使用该单个命令将它们全部安装。

在分发我的代码时,python 是否有一个等效的概念,或者我是否需要在我的 README 中告诉人们安装每个依赖项,如下所示:

pip install package1
pip install package2

在他们可以使用我的代码之前?

【问题讨论】:

    标签: python node.js npm pip


    【解决方案1】:

    添加所有必要的包后

    pip freeze > requirements.txt
    

    创建一个需求文件。

    pip install -r requirements.txt
    

    再次安装这些软件包,比如在生产期间。

    【讨论】:

    • 正确接受这一点说明如何自动创建需求文件
    • 这将列出所有已安装的包,而不仅仅是项目使用的包。因此,如果不在虚拟环境中使用,请小心。不过,我认为没有任何办法。
    【解决方案2】:

    是的,它被称为需求文件:

    https://pip.pypa.io/en/stable/cli/pip_install/#requirement-specifiers

    您可以指定包名和版本号。

    你也可以指定一个 git url 或者一个本地路径。

    在通常情况下,您会指定包后跟版本号,例如

    sqlalchemy=1.0.1
    

    您可以通过命令安装requirements.txt文件中指定的所有包

    pip install -r requirements.txt
    

    【讨论】:

    【解决方案3】:

    最好的方法可能是 pipenv!我个人使用它!

    但是,在本指南中,我将解释如何仅使用 python 和 pip 来完成它!并且没有 pipenv!这是第一部分!它会让我们更好地理解 pipenv 是如何工作的!还有第二部分处理 pipenv!检查pipenv(更接近npm)部分

    Python 和点子

    用 python 搞定一切!这里的主要元素:

    • 虚拟环境
    • 需求文件(软件包列表)
    • pip 冻结命令
    • 如何从需求文件安装软件包

    虚拟环境及原因

    请注意,为此需要使用包 venv!这是官方的事情!并附带从 3.3+ 开始的 python 3 安装!

    要知道它是什么以及为什么检查一下 https://docs.python.org/3/tutorial/venv.html

    简而言之!一个虚拟环境将帮助我们管理一个隔离版本的 python 解释器!安装包也是如此!这样!不同的项目不必依赖相同的包安装而必须冲突!阅读上面的链接解释并展示它!

    ... 这意味着一个 Python 安装可能无法满足每个应用程序的要求。如果应用程序 A 需要特定模块的 1.0 版,而应用程序 B 需要 2.0 版,则要求发生冲突,安装 1.0 或 2.0 版将导致一个应用程序无法运行。

    您可以查看flask framework doc上的解释!

    https://flask.palletsprojects.com/en/1.1.x/installation/#virtual-environments

    为什么我们关心这个并且应该使用它!隔离项目! (每个都有它的环境)!然后冻结命令将在每个项目基础上工作!检查最后一段

    用法

    这里有一个关于如何设置和工作的很好的指南:

    https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/

    先检查安装部分!

    然后

    创建一个虚拟环境,您可以转到您的项目目录并运行:

    在 macOS 和 Linux 上:

    > python3 -m venv env
    

    在 Windows 上:

    > py -m venv env
    

    注意您应该使用 .gitignore 或类似文件从版本控制系统中排除您的虚拟环境目录。

    要开始在控制台中使用环境,您必须激活它

    https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#activating-a-virtual-environment

    在 macOS 和 Linux 上:

    > source env/bin/activate
    

    在 Windows 上:

    > .\env\Scripts\activate
    

    查看有关如何检查您是否在环境中的部分(使用哪个(linux、unix)或在哪里(windows)!

    停用您使用

    > deactivate
    

    需求文件

    https://pip.pypa.io/en/latest/user_guide/#requirements-files

    “需求文件”是包含要使用 pip install 安装的依赖项列表的文件

    如何安装需求文件

    pip install -r requirements.txt
    

    需求文件用于保存 pip freeze 的结果,以实现可重复安装。在这种情况下,您的需求文件包含在 pip freeze 运行时安装的所有内容的固定版本

    python -m pip freeze > requirements.txt
    python -m pip install -r requirements.txt
    

    一些语法:

    pkg1
    pkg2==2.1.0
    pkg3>=1.0,<=2.0
    

    == 表示精确!

    requests==2.18.4
    google-auth==1.1.0
    

    强制 pip 接受早期版本

    ProjectA
    ProjectB<1.3
    

    使用带有标签的 git(自己修复错误而不是等待)

    git+https://myvcs.com/some_dependency@sometag#egg=SomeDependency
    

    再次检查链接https://pip.pypa.io/en/latest/user_guide/#requirements-files 我从他们那里挑选了所有的例子!你应该看看解释!还有细节!

    格式详情请查看:https://pip.pypa.io/en/latest/cli/pip_install/#requirements-file-format

    冻结命令

    Pip 可以使用 freeze 命令导出所有已安装包及其版本的列表!在命令运行时!列出当前环境中所有已安装包的列表!

    pip freeze
    

    这将输出如下内容:

    cachetools==2.0.1
    certifi==2017.7.27.1
    chardet==3.0.4
    google-auth==1.1.1
    idna==2.6
    pyasn1==0.3.6
    pyasn1-modules==0.1.4
    requests==2.18.4
    rsa==3.4.2
    six==1.11.0
    urllib3==1.22
    

    我们可以把它写到需求文件中

    pip freeze > requirements.txt
    

    https://pip.pypa.io/en/latest/cli/pip_freeze/#pip-freeze

    继续安装包

    通过为每个项目使用 venv(虚拟环境)!项目是孤立的!然后 freeze 命令将仅列出安装在该特定环境中的软件包!由项目基地组成!冻结命令在运行时列出软件包!与确切的版本匹配!我们从中生成一个需求文件(requirements.txt)!我们可以将其添加到项目存储库中!并安装依赖项!

    整体可以在这个意义上完成:

    Linux/Unix

    python3 -m venv env
    source env/bin/activate
    pip3 install -r requirements.txt
    

    窗户

    py -m venv env
    .\env\Scripts\activate
    pip3 install -r requirements.txt
    

    克隆 repo 后的第一次设置!

    创建新环境!

    然后激活它!

    然后将所需的包安装到它!

    否则这里有一份关于使用 requiremnets 文件和来自官方文档的虚拟环境安装包的完整指南:https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/

    第二个指南也显示得很好:https://docs.python.org/3/tutorial/venv.html

    链接列表(已列出):

    pipenv(更接近npm)

    https://pipenv.pypa.io/en/latest/

    pipenv 是一个类似于 npm for python 的工具!是超级套的点子!

    pipenv 为我们创建虚拟环境!并管理依赖关系!

    一个很好的功能是能够像文件一样编写packages.json!里面也有脚本部分!

    Executing pipfile scripts

    run python command with alias in command line like npm

    安装

    https://pipenv.pypa.io/en/latest/install/

    virtualenv-mapping-caveat

    https://pipenv.pypa.io/en/latest/install/#virtualenv-mapping-caveat

    对我来说,在项目中创建环境(就像 node_modules 一样)甚至应该是默认设置!确保激活它!通过设置环境变量!

    pipenv 看起来更方便!

    主要管理运行脚本太好了,不容错过!一个可以简化一切的工具!

    基本用法和与 npm 的比较

    https://pipenv.pypa.io/en/latest/basics/

    (请务必查看上面的指南以熟悉基础知识)

    注意,npm package.json 的等价物是 PipFile 文件!

    一个例子:

    [[source]]
    url = "https://pypi.org/simple"
    verify_ssl = true
    name = "pypi"
    
    [packages]
    flask = "*"
    simplejson = "*"
    python-dotenv = "*"
    
    [dev-packages]
    watchdog = "*"
    
    [scripts]
    start = "python -m flask run"
    
    [requires]
    python_version = "3.9"
    
    

    Pipfile.lock 像 package.lock

    运行 npm install 等效!你跑pipenv install

    安装新包

    pipenv install <package>
    

    如果不存在,这将创建一个 Pipfile。如果确实存在,它将自动使用您提供的新包进行编辑。

    就像使用 npm 一样!

    $ pipenv install "requests>=1.4"   # will install a version equal or larger than 1.4.0
    $ pipenv install "requests<=2.13"  # will install a version equal or lower than 2.13.0
    $ pipenv install "requests>2.19"   # will install 2.19.1 but not 2.19.0
    

    如果设置了PIPENV_VENV_IN_PROJECT=1 环境变量!让 pipenv 在项目中设置虚拟环境!它是在名为 .venv 的目录中创建的(相当于 node_modules)。

    同时运行 pipenv install 目录中没有 PipFile!既不是虚拟环境!将在.venv 目录(相当于node_modules)上创建虚拟环境!并生成一个PipFilePipfile.lock

    安装烧瓶示例:

    pipenv install flask
    

    作为开发依赖安装

    pipenv install watchdog -d
    

    pipenv install watchdog -dev
    

    就像使用 npm 一样!

    pipenv 所有命令(pipenv -h)

    Commands:
      check      Checks for PyUp Safety security vulnerabilities and against PEP
                 508 markers provided in Pipfile.
    
      clean      Uninstalls all packages not specified in Pipfile.lock.
      graph      Displays currently-installed dependency graph information.
      install    Installs provided packages and adds them to Pipfile, or (if no
                 packages are given), installs all packages from Pipfile.
    
      lock       Generates Pipfile.lock.
      open       View a given module in your editor.
      run        Spawns a command installed into the virtualenv.
      scripts    Lists scripts in current environment config.
      shell      Spawns a shell within the virtualenv.
      sync       Installs all packages specified in Pipfile.lock.
      uninstall  Uninstalls a provided package and removes it from Pipfile.
      update     Runs lock, then sync.
    

    命令帮助

    pipenv install -h
    

    requirements.txt

    导入

    https://pipenv.pypa.io/en/latest/basics/#importing-from-requirements-txt

    使用 pipenv 进行环境管理

    https://pipenv.pypa.io/en/latest/basics/#environment-management-with-pipenv

    pipenv 运行

    要在项目虚拟环境中运行任何东西,您需要使用pipenv run

    就像pipenv run python server.py!

    自定义脚本快捷方式

    npm 中的脚本!

    https://pipenv.pypa.io/en/latest/advanced/#custom-script-shortcuts

    [scripts]
    start = "python -m flask run"
    

    然后运行

    pipenv run start
    

    就像使用 npm 一样!

    如果您想要 lockfile 的 requirements.txt 输出,请运行 $ pipenv lock -r。但是,这将包括所有哈希(这很棒!)。要获取不带哈希的 requirements.txt,请使用 $ pipenv run pip freeze。

    还要提一下 pipenv cli 渲染做得很好:

    请务必阅读基础指南!

    你可以看到 pipenv 有多么丰富!

    【讨论】:

      【解决方案4】:

      安装完所有包后,运行

      pip freeze > requirements.txt
      

      这会将包的详细信息保存在文件requirements.txt中。

      安装,运行

      pip install -r requirements.txt
      

      安装requirements.txt指定的包。

      【讨论】:

        【解决方案5】:

        我想在这里提出 pipenv。使用 Pipenv 管理包更容易,因为它可以为您管理包的列表和版本,因为我认为每次更改包时都需要运行 pip freeze 命令。

        它需要一个Pipfile。该文件将包含您所需的所有包及其版本,就像 package.json 一样。

        您可以使用pipenv install/uninstall/update &lt;package&gt;删除/更新/添加项目

        这还会为您的项目生成一个依赖关系树。就像 package-lock.json

        Checkout this post on Pipfiles

        Learn more about Pipenv

        【讨论】:

          猜你喜欢
          • 2010-11-28
          • 1970-01-01
          • 1970-01-01
          • 2020-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-18
          • 1970-01-01
          相关资源
          最近更新 更多