jjzjj

python - Ubuntu + virtualenv = 一团糟? virtualenv 讨厌 dist-packages,想要 site-packages

coder 2023-08-14 原文

有人可以向我解释一下 python 在 ubuntu 9.04 中发生了什么吗?

我正在尝试启动 virtualenv,而 --no-site-packages 标志似乎对 ubuntu 没有任何作用。我用 easy_install 安装了 virtualenv 1.3.3(我已经升级到 setuptools 0.6c9),所有的东西似乎都安装到了 /usr/local/lib/python2.6/dist-packages

假定当使用 apt-get 安装包时,它被放置在 /usr/lib/python2.6/dist-packages/ 中?

问题是,还有一个 /usr/local/lib/python2.6/site-packages 也只是空着。看起来(通过查看 virtualenv 中的 path)这是 virtualenv 用作备份的文件夹。因此即使我忽略了 --no-site-packages,我也无法从我的任何 virtualenv 访问我的本地系统包。

所以我的问题是:

  1. 如何让 virtualenv 指向其中一个 dist-packages
  2. 我应该将它指向哪些 dist-packages? /usr/lib/python2.6/dist-packages/usr/local/lib/python2.6/dist-packages/
  3. /usr/lib/python2.6/site-packages 有什么意义?里面什么都没有!
  4. 路径上是先到先得吗?如果我在 /usr/local/lib/python2.6/dist-packages/ 中安装了较新版本的软件包 XYZ,并且在 中安装了旧版本(来自 ubuntu repos/apt-get)/usr/lib/python2.6/dist-packages,当我import xyz 时导入了哪个?我假设这是基于路径列表,是吗?
  5. 这到底为什么这么令人困惑?有什么我遗漏的吗?
  6. 在哪里定义 easy_install 应该安装到 /usr/local/lib/python2.6/dist-packages
  7. 这也会影响 pip 吗?

感谢任何能解决这个问题的人!

最佳答案

我相信 Mike Orr 来自 the virtual-env mailing list 的回答似乎是最好的。请注意,OP 在两个地方都发布了这个问题。

邮件原始内容:

多年前,Debian 创建了/usr/local/lib/pythonVERSION/site-packages, 并编译 Python 二进制文件以将其包含在默认搜索中 小路。 Ubuntu 一如既往地遵循了 Debian 的领导。 python 开发人员不喜欢这样,因为你会受到干扰 使用相同站点包的本地安装的/usr/local/bin/python 目录。 Ubuntu 最终决定放弃站点包并使用 dist-packages 相反,他们发明了一个名称,所以它不会 干扰任何事情。如果 你用谷歌搜索它,在 Python 错误跟踪器或 distutils SIG 或 这样的。

系统工作,至少如果你使用 Ubuntu virtualenv 包。 有些人在使用本地安装的 virtualenv 时遇到问题 Ubuntu 因为没有添加神奇的 sys.path 条目或 某物。我不确定 --no-site-packages 因为我从不使用 该选项:我从 Ubuntu 包中运行 PIL 和 mysqldb,因为它 有时很难编译它们的 C 依赖项。 (需要 正确的头文件,Python 忽略头文件等)

所以 Ubuntu Python 包进入 /usr/lib/pythonVERSION/dist-包。或者那个 python-support 目录出于某种原因。本地安装的 Python 包进入 /usr/local/lib/pythonVERSION/dist-packages 默认情况下。每当我 安装我运行的 Ubuntu 9.04 系统:

$ sudo apt-get 安装 python-setuptools (6.0c9) $ sudo apt-get 安装 python-virtualenv (1.3.3) $ sudo easy_install pip $ sudo pip install virtualenvwrapper

虽然我还没有尝试过 --no-site-packages,但 virtualenvs 以这种方式工作得很好。

I'm trying to spin up virtualenv, and the --no-site-packages flag seems to do nothing with ubuntu. I installed virtualenv 1.3.3 with easy_install (which I've upgraded to setuptools 0.6c9)

这些版本都在 Ubuntu 9.04 中,所以你让它变得更难了 自己在本地安装它们。

and everything seems to be installed to /usr/local/lib/python2.6/dist-packages

I assume that when installing a package using apt-get, it's placed in / usr/lib/python2.6/dist-packages/ ?

  1. Is it first come first serve on the path? If I have a newer version of package XYZ installed in /usr/local/lib/python2.6/dist- packages/ and and older one (from ubuntu repos/apt-get) in /usr/lib/ python2.6/dist-packages, which one gets imported when I import xyz? I'm assuming this is based on the path list, yes?

sys.path 按顺序扫描。唯一有趣的是 .pth eggs 比某些人预期的更早或更晚进入路径。但是如果 你正在使用 pip 来做它能做的一切(即除了安装 pip 本身,预编译的鸡蛋,以及一个本地目录的快照 复制而不是鸡蛋链接),无论如何你不会有很多 .pth 鸡蛋。

  1. Why the hell is this so confusing? Is there something I'm missing here?

它没有很好的记录。我通过浏览网页弄明白了。

  1. Will this affect pip as well?

是的,pip会自动安装到 /usr/local/lib/pythonVERSION/站点包。使用“pip install -E $VIRTUAL_ENV packagename"安装到 virtualenv 中。

关于python - Ubuntu + virtualenv = 一团糟? virtualenv 讨厌 dist-packages,想要 site-packages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1215610/

有关python - Ubuntu + virtualenv = 一团糟? virtualenv 讨厌 dist-packages,想要 site-packages的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby - 如何在 Ubuntu 中清除 Ruby Phusion Passenger 的缓存? - 2

    我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:

  3. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  4. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  5. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  6. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  7. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  8. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  9. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  10. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

随机推荐