当前位置: 首页 > 知识库问答 >
问题:

Python venv文件夹到底是怎么工作的?我的项目使用这个venv文件夹的依赖项,使用不同的Python版本执行项目?

柴砚文
2023-03-14

我是Python的绝对初学者(我来自Java),我对我的项目中的venv文件夹有以下疑问。

所以基本上我有这个项目结构:

如你所见,它包含venv文件夹。阅读Python官方留档:https://docs.python.org/3/library/venv.html

我可以阅读:

venv模块支持创建具有自己站点目录的轻量级“虚拟环境”,可以选择与系统站点目录隔离。每个虚拟环境都有自己的Python二进制文件(与用于创建此环境的二进制文件版本相匹配),并且可以在其站点目录中有自己独立的一组已安装的Pythin包。

根据我的理解,这意味着,使用venv,每个项目都有自己的venv文件夹,其中包含:

>

  • bin 文件夹:它包含 Python 解释器二进制文件(在此特定情况下为 Python 3.7)。

    lib文件夹:包含了我已经安装的依赖,使用pip3(事实上,我安装sc

    这是因为我的PyCharm IDE设置为使用Python 3.7

    如果这个推理是正确的(我不确定),这意味着当我运行类似的东西时:

    python3 packet_sniffer.py
    

    packet_niffer。py脚本(包含在上一个项目中)将使用Python3 byary和venv文件夹中的依赖项运行。正确吗?

    如果我的推理是正确的,我有以下疑问:

    当我使用Python 2运行它时会发生什么

    python packet_sniffer.py
    

    我想它不再使用嵌入到我项目的venv文件夹中的Python 3版本。我使用的是什么依赖关系?它从哪里来?

    正如您可以看到的,我使用的是Python2版本:

    root@kali:~# python --version
    Python 2.7.17
    root@kali:~# python3 --version
    Python 3.7.5
    
  • 共有3个答案

    沃威
    2023-03-14

    如果您激活了虚拟环境,那么您所说的关于执行python3的一切都是正确的。然而,所有其他命令仍然可用,并将从它们所在的任何位置运行,假设它们可以被shell找到。因此,您的python命令可能正在运行系统级安装的python版本。

    如果你想知道这个python解释器的确切运行位置:

     python
     >>> import sys
     >>> print(sys.executable)
     C:\Python27\python.exe
    
    柯立果
    2023-03-14

    venv文件夹是安装python虚拟环境的建议标准。要使用虚拟环境,必须首先激活它。

    注意:在安装应用程序所需的任何软件包之前激活您的python虚拟环境。

    从您的命令行执行:

    source venv/bin/activate
    python packet_sniffer.py 
    

    注意:您不需要指定python的特定版本,因为它默认为用于创建虚拟环境的版本。

    PyCharm可以配置为利用python虚拟环境

    https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html

    岳杜吟
    2023-03-14

    如果您创建了一个虚拟环境,然后将其激活,那么如果您调用其中任何一个:python foo,则安装在该虚拟环境中的python解释器将运行。py/python3 foo.py。调用python foo之间没有区别。py或python3 foo。py(当然,如果您安装了python3)。

    lib 文件夹将包含您在此虚拟环境中通过 pip 安装的关联依赖项,当您通过此虚拟环境使用 python 解释器时,您将使用上述依赖项

    根据我的理解,这意味着,使用venv,每个项目都有自己的venv文件夹,其中包含:

    > < Li > < p > bin文件夹:它包含Python解释器二进制文件(在此特定情况下为Python 3.7)。

    lib文件夹:包含了我已经安装的依赖,使用pip3(事实上,我安装sc

    使用 venv 每个项目都有自己的虚拟环境文件夹,您可以命名任何您想要的名称,包含 是的 bin 文件夹和 lib 文件夹。

     类似资料:
    • 我正在使用maven shade插件创建一个胖罐子,其中也包括一些弹性城堡罐子。但这造成了问题,因为Bouncy Castle的未签名版本。

    • 问题内容: 我注意到Node.js项目通常包含以下文件夹: / libs,/ vendor,/ support,/ spec,/ tests 这些到底是什么意思?它们之间有什么区别,我应该在哪里包含引用的代码? 问题答案: 关于您提到的文件夹: 通常用于自定义 或 包含第三方库(使用git作为源代码管理时添加为git子模块) 包含BDD测试规范。 包含应用程序的单元测试(使用测试框架,请参见 此处

    • 我工作的地方使用Maven,我们有很多内部库。我们尝试以向后兼容的方式进行更改,但有时我们的一个库需要另一个库的较新版本。如果最终产品没有加入较新的库版本,这可能会导致问题。 由于我们有很多库,如果最终产品使用了库A、B和C,而A和B都使用了不同版本的C,那么并不总是使用最新版本的C。从介绍到依赖机制: 依赖项中介--这确定当遇到工件的多个版本时,将使用依赖项的哪个版本。目前,Maven2.0只支

    • 我在我的项目中使用了Maven和几个库,其中一些嵌套在最后的JAR文件中。 提前谢了。

    • 我们看一下全局的文件结构: ▸ build/ // 编译用到的脚本 ▸ config/ // 各种配置 ▸ dist/ // 打包后的文件夹 ▸ node_modules/ // node第三方包 ▸ src/ // 源代码 ▸ static/

    • 如何在项目窗格中配置文件依赖项?例如文件会自动添加为编译它们的的依赖项。 但源地图文件没有。我该如何改变这一点? upd:以下是文件观察程序选项: