From 0f024a9655f8d08df2947e1c84b69f60427bf57f Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Sat, 16 Feb 2019 07:44:30 +0200 Subject: [PATCH] dvc: optimize imports Currently `dvc` takes ~0.7sec to finish. After this patch: 0.17sec. Profiling has been done using: python -X importtime -m dvc 2> log.log tuna log.log Signed-off-by: Ruslan Kuprieiev --- dvc/command/remote.py | 3 ++- dvc/repo/checkout.py | 3 ++- dvc/repo/imp.py | 5 ++--- dvc/repo/status.py | 3 ++- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/dvc/command/remote.py b/dvc/command/remote.py index f108a1383..caf30f986 100644 --- a/dvc/command/remote.py +++ b/dvc/command/remote.py @@ -6,7 +6,6 @@ import re import dvc.logger as logger from dvc.command.base import fix_subparsers from dvc.config import Config -from dvc.remote import _get, RemoteLOCAL from dvc.command.config import CmdConfig @@ -30,6 +29,8 @@ class CmdRemoteAdd(CmdConfig): return os.path.relpath(path, os.path.dirname(config_file)) def run(self): + from dvc.remote import _get, RemoteLOCAL + remote = _get({Config.SECTION_REMOTE_URL: self.args.url}) if remote == RemoteLOCAL: self.args.url = self.resolve_path( diff --git a/dvc/repo/checkout.py b/dvc/repo/checkout.py index 0b7adc5fa..2f5a74a07 100644 --- a/dvc/repo/checkout.py +++ b/dvc/repo/checkout.py @@ -1,7 +1,6 @@ from __future__ import unicode_literals import dvc.logger as logger -from dvc.stage import StageFileDoesNotExistError, StageFileBadNameError from dvc.exceptions import DvcException @@ -14,6 +13,8 @@ def _cleanup_unused_links(self, all_stages): def checkout(self, target=None, with_deps=False, force=False, recursive=False): + from dvc.stage import StageFileDoesNotExistError, StageFileBadNameError + if target and not recursive: all_stages = self.active_stages() try: diff --git a/dvc/repo/imp.py b/dvc/repo/imp.py index 0d40cf499..a51ab7f48 100644 --- a/dvc/repo/imp.py +++ b/dvc/repo/imp.py @@ -1,7 +1,6 @@ -from dvc.stage import Stage - - def imp(self, url, out, resume=False): + from dvc.stage import Stage + stage = Stage.create(repo=self, cmd=None, deps=[url], outs=[out]) if stage is None: diff --git a/dvc/repo/status.py b/dvc/repo/status.py index b341d78e0..d30bee7fe 100644 --- a/dvc/repo/status.py +++ b/dvc/repo/status.py @@ -1,7 +1,6 @@ from __future__ import unicode_literals import dvc.logger as logger -import dvc.remote.base as cloud def _local_status(self, target=None, with_deps=False): @@ -36,6 +35,8 @@ def _cloud_status( with_deps=False, all_tags=False, ): + import dvc.remote.base as cloud + used = self.used_cache( target, all_branches=all_branches,