管理多个开发人员的 sys.path

2023-12-10

我面临的问题虽小但很烦人:

一位同事正在开发版本控制系统 X (VCS-X) 中的一个项目。 另一位同事正在另一个版本控制系统 Y 中工作,并使用来自 X 的软件包。

不幸的是,VCS-X 中的同事使用本地导入并使用修改他的路径sys.path.append('trunk/my_location')在他们的代码中。

我的观点是,这是错误的做法,因为 X 中的同事强迫 Y 同事在能够运行代码之前编辑代码,仅仅是因为他们的存储库命名不同。

应该如何管理这些依赖关系?

Example:

开发者X:

>>> sys.path.append('my_repo/my_location')
>>> from my_location import toolbox
>>> nosetests -v
toolbox.test1 ... ok
toolbox.test2 ... ok
...

开发商Y:

Step 1:

>>> nosetests -v
toolbox.test1 ... fail
...

Step 2:

>>> sys.path.append('my_repo/my_location')
>>> from my_location import toolbox
Import error: No such package.

Step 3:

>>> sys.path.append('my_colleagues_repo/my_location')
>>> from my_location import toolbox
>>> nosetests -v
toolbox.test1 ... ok
toolbox.test2 ... ok

“……叹了口气;代码正在运行……”


Nobody应该做sys.path.append!这是您应该首先解决的工作流程问题。

在这种情况下,将适当的包装toolbox进入一个分布。开发商只想use代码来自toolbox,即通过导入语句或命令行脚本,将执行:

pip install --user toolbox

想要工作的开发者on the toolbox代码也应该使用 pip install。但是,该开发人员应该克隆存储库,创建/激活虚拟环境,然后执行:

 pip install --editable .

在这两种情况下,pip 都会整理出必要的内容sys.path以正确的方式为您提供东西。

跟着PyPA Python 打包用户指南有关如何创建发行版的详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

管理多个开发人员的 sys.path 的相关文章

随机推荐

  • 应用栏上方的空白区域

    如何消除下面显示的空白区域 水平红线之间的空间 直到我买了一部新手机 三星 S8 后 我才在我的应用程序上看到这一点 它比我的旧 HTC One 具有更多的垂直屏幕空间 该活动的布局文件的开头是
  • Clojure Ring/Compojure REPL 中的动态处理程序更新

    我使用以下命令创建了一个新的 Compojure Leiningen 项目lein new compojure test Web 服务器运行于lein repl进而 user gt use ring adapter jetty user g
  • -m 开关的用途是什么?

    你能向我解释一下调用和调用之间有什么区别吗 python m mymod1 mymod2 py args and python mymod1 py mymod2 py args 看来在这两种情况下mymod1 py被称为和sys argv
  • AEM 中基于资源解析器的 URL 映射

    我们有以下网站结构 content mysite en home testlevel1page testlevel2page 现在的要求是映射 http www mysite com gt content mysite en home ht
  • 如何使用 JSTL 从 JSON 字符串输出值?

    我正在使用 JBoss 7 1 3 As Final 并正在构建 Spring 3 2 11 RELEASE Web 应用程序 在我的 JSP 页面上有这个 jsonString 我想知道的是假设这个 json 字符串有一个属性 name
  • 查找对象的对象中属性的最大值

    我有一个这样的对象 const users adam age 28 extraInfo foobar brad age 31 extraInfo foobar jef age 12 extraInfo baarfoo 如何检查哪个对象具有最
  • 使用 HttpWebRequest 的 HTTP POST

    我正在尝试发布一些数据 就像我在 HTML 网站上使用 FORM 一样 ContentType multipart form data 目标是亚马逊的s3 我正在使用 HttpWebRequest HttpWebResponse 一切对我来
  • 如何在 Swift 3 中将自定义类保存为 CoreData 实体的属性?

    I have a CoreData Entity SavedWorkout It has the following attributes completionCounter是一个数组Bool and workout是一个名为的自定义类Wo
  • 将基于回调的异步方法转换为可等待任务的最佳方法

    转换 包装使用回调返回 可等待 任务的 经典 异步方法的最佳方法是什么 例如 给出以下方法 public void GetStringFromUrl string url Action
  • 带边框的透明窗口

    我正在尝试制作一个小型屏幕截图程序 我正在制作一个带边框的小型 WPF 窗口 这应该起到 视口 的作用 因此窗口内 边框内 的所有内容都应该是屏幕截图 然而 当我将窗口的透明度设置为 0 时 我看不到边框 关于如何使我的网格完全透明 并且仍
  • 另一个 nginx 入口重写目标问题

    我有一项服务和一个带有 kubernetes nginx 入口控制器的入口资源 我想要 student我的 url 的路径 用于转到应用程序的根目录并匹配以下的任何其他 url 段student 例如 http example com st
  • 有条件的发布事件

    介绍 我正在使用 sails 构建一个私人消息系统 但这个问题几乎适用于任何事情 我将使用消息系统作为示例来使问题更清楚 作为一些背景信息 我正在使用最新的 sails 0 10 RC 问题 Sails 允许您使用 redis 进行会话和
  • 使用 char[] 生成 MD5 哈希值

    如何转换使用此方法获得的 char 密码 char password passwordInputField getPassword MD5 哈希值 通常我会使用下面的方法 但 getBytes 仅与字符串兼容 MessageDigest m
  • 如何仅删除以“//”开头的 JavaScript 注释?

    首先澄清一下 我已经有了一个压缩工具 可以成功压缩其他所有内容 因此我不需要漫长而复杂的压缩工具preg replace正则表达式 只是一个简单的preg replace or str replace规则就可以了 我只想删除以 开头的 Ja
  • 当 iframe 调用站点时,会话不起作用

    我有第一个网站https www mydomain1 com我在其中使用 PHP 会话 没问题 一切正常 当我从一个页面转到另一个页面时 我可以访问我的会话变量 我有第二个网站https www mydomain1 com我通过 ifram
  • Android facebook 图表批处理 api

    我正在尝试使用图批量API 有参考代码吗 我们如何设置 参数 有没有人参考android应用程序使用过batch api 我在用这个链接我还使用过单独的图形 API 例如 fbApiObj request me notifications
  • 确定向量中每个唯一元素的出现次数

    如何确定 MATLAB 向量中某个值的相对频率 vector 2 2 2 2 1 1 1 2 2 1 1 1 2 2 2 2 1 2 什么函数将返回每个唯一元素出现的次数 您可以使用unique结合histc以获得相对频率 A 1 2 3
  • 为什么 pySerial 不写入我的程序内部?

    所以我在我的arduino nano上设置了一个程序 它从串行端口读取一个字节 并根据收到的字节是1还是0来打开LED 我在串行监视器和在 python 3 shell 中使用 pySerial 它工作得很好 但是当我有一个像这样的简单程序
  • Bootstrap Sass 与 Rails 4

    我正在尝试在我的rails 4 0 0 项目中使用bootstrap sass 3 1 0 2 和sass rails 4 0 1 我的 application css scss 文件如下所示 This is a manifest file
  • 管理多个开发人员的 sys.path

    我面临的问题虽小但很烦人 一位同事正在开发版本控制系统 X VCS X 中的一个项目 另一位同事正在另一个版本控制系统 Y 中工作 并使用来自 X 的软件包 不幸的是 VCS X 中的同事使用本地导入并使用修改他的路径sys path ap