【问题标题】:Why virtualenv relies on the global python instead of the local one, after being pulled?为什么virtualenv在被拉取后依赖全局python而不是本地python?
【发布时间】:2018-10-17 13:45:29
【问题描述】:

我拉 (git) 一个使用 virtualenv 创建的 python 项目(由我在另一台计算机上创建)。因此,python 库实际上位于该项目的本地目录中(例如,fila_env/bin/python)。拉动它后,我可以找到它(见下面的树)。但是,当我激活环境(使用source fila_env/bin/activate)时,正在使用这台机器上的python而不是virtualenv:

(fila_env) username@ASCSC-645A:~/CODES/.../myProject$ which python
>>> /usr/bin/python

我四处搜索,但找不到一个好的解决方案。我想知道:

  1. 我如何保证如果有人拉这个项目,他们只会 使用提供的 python 库,而不是他们自己的 python。
  2. 这是创建 virtualenv 并将整个项目(包括 virtualenv)推送到云端的正确方法吗?

这里有更多信息:

├── yyyyyyExample.py
├── fila_env
│   ├── bin
│   │   ├── activate
│   │   ├── ...
│   │   ├── python
│   │   ├── python2 -> python
│   │   ├── python2.7 -> python
│   │   ├── python-config
│   │   ├── ...
│   │   └── wheel
│   ├── include
│   │   └── python2.7 -> /usr/include/python2.7
│   ├── lib
│   │   └── python2.7
│   ├── local
│   │   ├── bin -> .../fila_env/bin
│   │   ├── include -> .../fila_env/include
│   │   └── lib -> .../fila_env/lib
│   ├── pip-selfcheck.json
│   └── share
│       ├── jupyter
│       └── man
└── xxxxxxExample.py

【问题讨论】:

  • 作为替代方案:如果您有明确的 (C)Python 依赖项,最好将其打包为 Conda 包。
  • 我对问题的回答是“不”。以其他方式指定任何依赖项,或者只是尝试完全避免它们(您真的需要特定的 Python 版本吗?究竟是什么版本,为什么?)。
  • 如果您激活我们的本地环境,它将尝试从本地获取 pip 包,如果在本地环境中找不到包,它将从全局获取。您可以创建一个包含所有 pip 包的 request.txt。每个克隆我们项目的人都会在本地环境中进行 pip 安装
  • @LavanyaPant 所有这些软件包都是使用本地 pip 安装的。 requirements.txt 文件也在那里,但我只发布了一个汇总列表。
  • @Azim 我们应该避免将虚拟环境推送到 git。如果有人想在本地安装它,他/她应该创建虚拟环境并安装你的包。

标签: python virtualenv


【解决方案1】:
  1. 你不能也不应该,如果我使用 32 位 Linux 并且你的 virtualenv 是在 64 位 Windows 上创建的(反之亦然),你的 python 二进制文件肯定不适合我。

  2. 再说一遍,不。 virtualenv 是开发人员的工具,而不是分发工具。对于分发,您应该考虑使用sdist/egg/wheel,或使用PyInstallerpy2exe 或类似工具创建依赖于平台的二进制文件。

【讨论】:

    猜你喜欢
    • 2014-09-16
    • 2023-04-06
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多