代码之家  ›  专栏  ›  技术社区  ›  JL Peyret

Python和virtualenv-为什么Python版本用来命名子目录?

  •  1
  • JL Peyret  · 技术社区  · 7 年前

    test_venv/venv3/lib/>>>python3.6<<</site-packages

    当你在3.6venv中,你当然会得到3.6包。与2.7相同,即2.7包。你不能没有 activate -事先做静脉注射,这样混乱的风险似乎很低。

    除此之外,人们经常会问,为什么与操作系统路径或python有关的东西不能正常工作搜索路径. 而且,使用python版本命名这些子路径使得很难概括在哪里可以找到 site-packages

    编辑:以下是在macOS上的,但我在Ubuntu18.04VM上得到了大致相同的行为。

    使用创建Python2虚拟环境 virtualenv ./venv2

    目录结构 tree -d -L 3 ./venv2/ :

    ./venv2/
    ├── bin
    ├── include
    │   └── python2.7 -> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
    └── lib
        └── python2.7
            ├── config -> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config
            ├── distutils
            ├── encodings -> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings
            ├── lib-dynload -> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
            └── site-packages
    

    python3 -m venv ./venv3

    ./venv3/
    ├── bin
    ├── include
    └── lib
        └── python3.6
            └── site-packages
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   Ondrej K.    7 年前

    它与 specification :

    这是cpython bit 如果你很好奇的话。

    至于原因:它反映了(正如所指出的(在规范和代码中也反映了)Windows上不同的搜索路径构造行为 sys.prefix (在本例中,这将由venv中python可执行文件的位置确定)。其解决方案在 Modules/getpath.c 并在评论中包含更详细的描述。

        2
  •  1
  •   Grzegorz Bokota    7 年前

    由于python的惯例,很少允许hos文件包命名系统的版本。