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

时间:2017-08-30 15:37:31

标签: python python-3.x import sys.path

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

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

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

我的观点是,这是错误的做法,因为X的同事迫使同事Y在能够运行之前编辑代码,仅仅因为他们的回购以不同方式命名。

如何管理这些依赖项?

实施例

开发者X

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

开发人员Y

第1步:

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

第2步:

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

第3步:

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

" ......叹息如下;代码正在运行......"

1 个答案:

答案 0 :(得分:1)

没有人应该做sys.path.append!这是一个工作流程问题,您应该首先解决。

在这种情况下,将toolbox打包到分发中是合适的。只想使用来自toolbox的代码的开发人员,即通过import语句或命令行脚本,将执行:

pip install --user toolbox

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

 pip install --editable .

在这两种情况下,pip都会以正确的方式为您排序必要的sys.path内容。

关注PyPA Python Packaging User Guide,了解有关如何创建分发的详细信息。