没有名为contextlib的模块?在virtualenv中?

时间:2019-03-14 00:36:34

标签: python macos virtualenv

我有一个virtualenv正在通过Dropbox在多台计算机上使用。我们的所有保管箱都同步到同一位置(或至少是符号链接,因此它看上去如此),因此,搬迁问题应该没有问题。

在我的机器上,一切正常。我可以创建一个virtualenv,它工作正常。但是,当其他人使用它时,python给出No module named contextlib

当我在其他人的计算机上创建virtualenv时,它似乎可以在我的计算机上运行(我尚未进行详尽的测试)

所有计算机均为macs。我的公司正在运行高塞拉山脉,其他人都在运行莫哈韦沙漠,以防万一。

如何解决此问题?或至少是什么原因造成的?

我见过Python: No module named contextlib?,但这似乎与嵌入式硬件无关。

注意:我了解python认为我不应该这样做。但是,我有一个不是程序员的用户群。他们无法管理自己的虚拟企业。他们无法处理复杂的码头工人的东西。他们想输入python foo.py并使其生效。过去,我已经将它与venvs一起使用。

如果python无法轻松处理这种简单情况,那么我认为这是个问题。

OH,我知道库对于不同的操作系统是不同的,我通过为Windows用户使用不同的venv组来更简单地处理这些问题。效果很好,没有问题。

2 个答案:

答案 0 :(得分:1)

一般而言,在计算机之间和不同操作系统之间共享依赖项文件夹会带来问题。现在,这可能适用于您的设置(所有相同操作系统的相同版本),但是一旦您将要与拥有windowslinux甚至同一版本的其他版本的人一起工作操作系统提供商,您会遇到问题。

与其寻找有关如何解决contextlib缺少的依赖项的变通办法,而是转到问题的根源,并通过共享依赖项文件夹来解决正在生成的问题。如果人们的环境有问题,可以创建一个脚本来运行项目,使用docker机器进行配置或使用虚拟机,该虚拟机将强制执行与基础版本始终相同的版本来运行内部所有内容。

这是有关如何organise dependencies in a project(来自python文档)的很好的阅读内容

此外,此外,我建议您将项目移至docker容器或类似容器中,以便所有人都可以在同一环境下工作,从长远来看,这将使开发和部署代码更容易。生产服务器。

对于run python on docker you can read this article,但还有很多事情可以长期缓解您的工作

如果您的用户无法运行pip install -r requirements.txt,我想他们也不能运行virtualenv --relocatable ENV吗?

我必须说,您必须为用户搜索新工具。也许脚本或使用简单的docker image命令的应用程序中的run类型会更容易。

答案 1 :(得分:0)

来自virtualenv documentation

  

通常,环境绑定到特定路径。 这意味着您不能在其中移动环境或将其复制到另一台计算机。您可以使用以下命令修复环境以使其可重定位:

$ virtualenv --relocatable ENV

同一页面上有重要说明:

  

注意:将任何软件包安装到环境中后,必须运行此命令。如果使环境可重定位,然后安装新的软件包,则必须再次运行命令。

     

此外,这不会使您的程序包跨平台。您可以移动目录,但是只能在其他类似的计算机上使用。

它仍然是实验性功能。不用说这不是建议的生产设置。

相关问题