我可以使用requirements.txt文件来处理本地python目录吗?
我有这样一个目录结构:我可以使用requirements.txt文件来处理本地python目录吗?,python,python-2.7,pip,Python,Python 2.7,Pip,我有这样一个目录结构: src/ --scripts/ ----foo/a.py ----bar/b.py --lib1 --lib2 --lib3 如果想让scripts/foo/和scripts/bar/be目录包含可运行的python脚本,这些脚本使用lib1、lib2、lib3中的模块。脚本、lib1、lib2和lib3都是处于活动开发中的独立内部git存储库。没有可依赖的静态接口或发布版本。基本上,它们几乎是由一个小团队同时编写的 我玩过制作lib[1-3]子模块,我真的很讨厌这个工
src/
--scripts/
----foo/a.py
----bar/b.py
--lib1
--lib2
--lib3
如果想让scripts/foo/和scripts/bar/be目录包含可运行的python脚本,这些脚本使用lib1、lib2、lib3中的模块。脚本、lib1、lib2和lib3都是处于活动开发中的独立内部git存储库。没有可依赖的静态接口或发布版本。基本上,它们几乎是由一个小团队同时编写的
我玩过制作lib[1-3]子模块,我真的很讨厌这个工作流程。我想我希望能够从foo/a.py中“导入lib1”,并让它使用lib1中的当前代码。一旦事情成熟,我们可能会对所有内容进行版本化,并开发出合适的软件包
一种方法是在每个脚本中使用sys.path
,显式地查找“../../”或其他内容。我想知道有没有更优雅的。我可以得到类似于pip install-r requirements.txt的东西来为我做这项工作吗?我不想做一个正式的pypi setup.py,我只想得到一个指向lib[1-3]目录当前内容的指针。我喜欢requirements.txt方法的原因是,随着libs的成熟,我最终会将version和git URL放在其中
或者,有一种完全不同的方法可以做到这一点吗?以通常的方式从git存储库安装模块确实需要一个setup.py
,但它可以是一个最小的模块,而不是像PyPI模块那样的更完整的模块。例如:
#!/usr/bin/env python
from distutils.core import setup
setup(
name="foo",
)
如果您将类似的内容放入每个lib存储库中,那么您可以使用-e使您的需求文件指向git repogit://git.example.com/foo.git#egg=foo
。如果将其安装到virtualenv中,则它将出现在virtualenv目录中的src/foo
,并且在从该virtualenv运行Python时,它将自动添加到sys.path
-e
选项也接受本地目录作为参数,因此,如果您保证当前工作目录在从requirements.txt
安装时始终是项目的根目录(以便正确解析相对路径),那么在其中写入-e lib1
之类的内容就可以了,然后,如果需要,仍然可以将这些库作为git子模块引用
如果您决定不创建setup.py
,那么您的任务就是模拟运行python setup.py develope
时会发生的情况。这个命令做两件事(至少从Python 2.7开始):
- 它在virtualenv(如果没有virtualenv,则在系统范围内)的
站点包lib目录中创建指向目标源目录的
- 它向
easy install.pth
添加了一行,该行也位于站点软件包
目录中,该目录也指向您的目标源目录
您可以选择通过运行setup.py editable
以外的方式执行上述两项操作,并对当前版本的Python获得相同的效果,但当然,在较新版本的Python中,可编辑发行版的实现可能会发生变化。如果我不使用virtualenv,它将安装在哪里?如果您是从git repo安装的,根据我的经验,pip
将在当前工作目录中创建一个src
目录。我不确定这是故意的还是由于未设置VIRTUAL_ENV
环境变量而导致的错误。如果您从本地目录安装,则它将尝试将egg链接和pth
文件写入系统范围的站点软件包
dir,并使用您指定的本地目录的绝对路径。