我有这样一个目录结构:
src/
--scripts/
----foo/a.py
----bar/b.py
--lib1
--lib2
--lib3
如果要使用lib1、lib2、lib3中的模块的可运行python脚本的scripts/foo/和scripts/bar/be目录,那么它的意图是。脚本、lib1、lib2和lib3都是独立的内部git存储库,正在积极开发中。没有可依赖的静态接口或已发布版本。基本上,它们都是由一个小团队几乎同时编写的。在
我玩过lib[1-3]子模块的制作,我真的很讨厌这个工作流程。我想我想要的是能够从foo/a.py执行“import lib1”,并让它使用lib1中的当前代码。一旦事情成熟,我们可能会对所有的东西进行版本化,并努力生产出合适的软件包。在
一种方法是在每个脚本中混用sys.path
,以显式地查找“../../”或其他内容。我想知道有没有更优雅的。我能不能找些类似pip install -r requirements.txt
的东西来帮我做这项工作?我不想做一个正式的pypi设置.py,我只想得到一个指向lib[1-3]目录当前内容的指针。我喜欢的原因要求.txt方法是,随着libs的成熟,我将把版本和git url放在那里。在
或者,有没有完全不同的方法?在
以通常的方式从git存储库安装模块需要一个
setup.py
,但它可以是一个最小值,而不是像PyPI模块那样更完整的模块。例如:如果您将类似的内容放入每个lib存储库中,那么您可以使用
-e git://git.example.com/foo.git#egg=foo
使您的需求文件指向git repo。如果您将其安装到virtualenv中,那么它将出现在virtualenv目录中的src/foo
处,并且当从该virtualenv运行Python时,它将自动添加到sys.path
。在-e
选项还接受一个本地目录作为参数,因此如果您保证在从requirements.txt
安装时当前工作目录始终是项目的根目录(以便正确解析相对路径),则在其中编写-e lib1
之类的内容应该可以正常工作,如果需要的话,您仍然可以将库作为git子模块引用。在如果您决定而不是来创建
setup.py
,那么您的任务就是模拟运行python setup.py develop
时会发生什么。此命令执行两个操作(至少在Python2.7中):site-packages
lib目录中创建一个指向目标源目录的egg link。在easy-install.pth
添加一行,该行也位于site-packages
目录中,该目录也指向目标源目录。在您可以选择通过运行
setup.py editable
以外的方法执行上述两个操作,并在当前版本的Python中获得相同的效果,但当然,在较新版本的Python中,可编辑发行版的实现可能会发生变化。在相关问题 更多 >
编程相关推荐