【问题标题】:"python setup.py install" does not install inside virtualenv“python setup.py install”未安装在 virtualenv 中
【发布时间】:2016-04-24 19:09:45
【问题描述】:

我正在尝试使用virtualenv 中的setup.pyPython 2.7 安装python 包。要求是包,它的依赖项应该放在virtualenv 路径的站点包文件夹中。

所以我激活了virtualenv 并前往setup.py 所在的位置。但是当我运行python setup.py install 时,包及其依赖项会安装在系统 python 站点包中。

为了在 virtualenv 中安装它,我必须在 virtualenv 中指定 python 的位置,例如 <virtualenv path>/bin/python setup.py install。鉴于 virtualenv 已经激活,这对我来说看起来很奇怪。这是在 virtualenv 中使用 setup.py 安装的正确方法吗?如果是,那为什么?如果不是,那么正确的做法是什么?

编辑:

我跑了which python,它指向了python在virtualenv中的位置。

我用的是centos 6机器。

【问题讨论】:

  • 我怀疑您的 virtualenv 没有真正激活,因为该问题没有任何命令行示例来确认这一点。您可以随时通过echo $PATHwhich python 进行确认。你也可以试试pip install . 而不是python setup.py install
  • 我发现which pythonwhich pip等是一个有用的命令,可以知道使用了哪个python并作为virtualenv激活的测试。如果 virtualenv 未激活 which python 会产生 /usr/bin/python。激活 virtualenv 后,它会生成 /home/ubuntu/.virtualenvs/myvirtualenvironmentname/bin/python 并且是一个线索,表明哪个站点包是已安装包的目的地。
  • 您好 Yogesh 您正在使用哪个操作系统。请告诉我,这将帮助我解决您的问题。

标签: python python-2.7 pip virtualenv setuptools


【解决方案1】:

链接的站点包

Virtualenv 可能会将其站点包目录链接到全局站点包。从手册页(我的是 1.5.2):

--no-site-packages    Don't give access to the global site-packages dir
                      to the virtual environment

在 1.5.2 版本中,此链接为默认链接,您需要在创建环境时另行指定。在未来的版本中,此行为已切换,因此 NOT 链接是默认行为。

做什么:

您可以通过<environment>/lib/python<ver>/no-global-site-packages.txt文件的存在来检查它是否链接。如果这存在,则您的站点包链接,这意味着 virtualenv 将安装并使用全局站点包,而不是按照您的预期创建自己的副本.不幸的是,事后没有办法改变这一点。这次您需要使用 --no-site-packages 选项重新创建 virtualenv。

【讨论】:

    【解决方案2】:

    如果您关注py2.7 tutorial on setup.py, 你会用

    from distutils.core import setup
    

    在我的 virtualenv(CENTOS 6.0 与 --no-site-packages 活动)中,它会产生同样的问题。

    相反,如果你使用

    from setuptools import setup
    

    它有效。

    我不知道为什么。希望其他人能指出来。

    【讨论】:

    • 我有同样的问题,但是使用 setuptools 并不能解决问题
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多