tob*_*lty 11 python django dependencies pip pypi
使用以下命令:
pip install -r requirements.txt -d sdists/
Run Code Online (Sandbox Code Playgroud)
您可以轻松创建与项目一起分发的需求存档.如果您的要求如下所示,这非常有用:
Django==1.3.1
django-tagging==0.3.1
django-robots==0.6.1
Run Code Online (Sandbox Code Playgroud)
然后,您可以在不触及PyPI的情况下安装这些要求,如下所示:
pip install -r requirements.txt --find-links sdists/ --no-index
Run Code Online (Sandbox Code Playgroud)
是否可以使用相同的方法来--editable满足要求?例如:
-e hg+https://bitbucket.org/ubernostrum/django-contact-form/@1d3791fa4dfb#egg=django-contact-form
Run Code Online (Sandbox Code Playgroud)
据我所知,pip install -d愉快地下载可编辑的需求并为您创建一个sdist,但pip install --find-links没有任何方法可以将下载的sdist与您的需求文件中的关联行匹配,因此它忽略了下载的sdist并继续检查像往常一样来自VCS的代码.
虽然使用 PIP 似乎不可能完全实现这一点,但有一种解决方法可以完成相同的任务。解决方法是从原始需求文件和 sdists 目录(仅用于该目录)自动生成第二个需求文件。
一个简单的实现可能看起来像这样(保存在名为“make_reqs.py”的文件中):
#!/usr/bin/env python
import re
import sys
import os.path
pat = '.+#egg=(.+)'
allowed_exts = ['.zip', '.tar.gz', 'tar.bz2']
def find_version(sdists_dir, name):
files = [f for f in os.listdir(sdists_dir) if f.startswith(name)]
if len(files) != 1:
return ''
version = files[0].replace(name+'-', '')
for ext in allowed_exts:
version = version.replace(ext, '')
return version
def get_requirements(file_name, sdists_dir):
out_reqs = ['--find-links file://%s' % os.path.abspath(sdists_dir)]
with open(file_name) as req_file:
reqs = [l.strip() for l in req_file.readlines()]
for req in reqs:
match = re.match(pat, req)
if match and not req.startswith('#'):
name = match.group(1)
version = find_version(sdists_dir, name)
if version:
out_reqs.append('%s==%s' % (name, version))
else:
out_reqs.append(req)
else:
out_reqs.append(req)
return out_reqs
if __name__ == '__main__':
print '\n'.join(get_requirements(*sys.argv[1:]))
Run Code Online (Sandbox Code Playgroud)
要使用该脚本,您需要执行以下操作:
python make_reqs.py requirements.txt /path/to/sdists > sdist_reqs.txt
pip install --no-index -r sdist_reqs.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2365 次 |
| 最近记录: |