Skip to content

Commit df3d00d

Browse files
authored
VR-4665: Require requirements param for Python blob (VertaAI#952)
* Require requirements param * Update tests * Update notebooks * Update webinar notebooks * Update everything else
1 parent 8deb2fd commit df3d00d

File tree

10 files changed

+28
-29
lines changed

10 files changed

+28
-29
lines changed

client/verta/tests/test_versioning/test_environment.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -95,27 +95,28 @@ def test_parse_pip_freeze(self):
9595

9696
class TestPython:
9797
def test_py_ver(self):
98-
env = verta.environment.Python()
98+
env = verta.environment.Python(requirements=[])
9999

100100
assert env._msg.python.version.major == sys.version_info.major
101101
assert env._msg.python.version.minor == sys.version_info.minor
102102
assert env._msg.python.version.patch == sys.version_info.micro
103103

104104
def test_env_vars(self):
105105
env_vars = os.environ.keys()
106-
env = verta.environment.Python(env_vars=env_vars)
106+
env = verta.environment.Python(requirements=[], env_vars=env_vars)
107107

108108
assert env._msg.environment_variables
109109

110110
def test_commit(self, commit):
111-
env = verta.environment.Python()
111+
env = verta.environment.Python(requirements=[])
112112

113113
commit.update('env', env)
114114
commit.save(message="banana")
115115
assert commit.get('env')
116116

117117
def test_reqs_from_env(self):
118-
env = verta.environment.Python()
118+
reqs = verta.environment.Python.read_pip_environment()
119+
env = verta.environment.Python(requirements=reqs)
119120
assert env._msg.python.requirements
120121

121122
def test_reqs(self, requirements_file):
@@ -130,13 +131,13 @@ def test_reqs_without_versions(self, requirements_file_without_versions):
130131

131132
def test_constraints_from_file(self, requirements_file):
132133
reqs = verta.environment.Python.read_pip_file(requirements_file.name)
133-
env = verta.environment.Python(constraints=reqs)
134+
env = verta.environment.Python(requirements=[], constraints=reqs)
134135
assert env._msg.python.constraints
135136

136137
def test_constraints_from_file_no_versions_error(self, requirements_file_without_versions):
137138
reqs = verta.environment.Python.read_pip_file(requirements_file_without_versions.name)
138139
with pytest.raises(ValueError):
139-
verta.environment.Python(constraints=reqs)
140+
verta.environment.Python(requirements=[], constraints=reqs)
140141

141142
def test_inject_verta_cloudpickle(self):
142143
env = verta.environment.Python(requirements=[])
@@ -154,7 +155,7 @@ def test_reqs_no_unsupported_lines(self, requirements_file_with_unsupported_line
154155
assert requirements == {"verta", "cloudpickle"}
155156

156157
def test_no_autocapture(self):
157-
env_ver = verta.environment.Python(_autocapture=False)
158+
env_ver = verta.environment.Python(requirements=[], _autocapture=False)
158159

159160
# protobuf message is empty
160161
assert not json_format.MessageToDict(

client/verta/tests/test_versioning/test_repository.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ def test_revert(self, repository):
192192

193193
def test_log_to_run(self, experiment_run, commit):
194194
blob1 = verta.dataset.Path(__file__)
195-
blob2 = verta.environment.Python()
195+
reqs = verta.environment.Python.read_pip_environment()
196+
blob2 = verta.environment.Python(reqs)
196197
path1 = "data/1"
197198
path2 = "env/1"
198199

client/verta/verta/environment/_python.py

+11-14
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@ class Python(_environment._Environment):
2222
2323
Parameters
2424
----------
25-
requirements : list of str, optional
26-
List of PyPI package names. If not provided, all packages currently installed through
27-
pip will be captured.
25+
requirements : list of str
26+
List of PyPI package names.
2827
constraints : list of str, optional
2928
List of PyPI package names with version specifiers. If not provided, nothing will be
3029
captured.
@@ -38,21 +37,22 @@ class Python(_environment._Environment):
3837
.. code-block:: python
3938
4039
from verta.environment import Python
41-
env1 = Python(requirements=Python.read_pip_file("../requirements.txt"))
42-
env2 = Python(
40+
env1 = Python(requirements=Python.read_pip_environment())
41+
env2 = Python(requirements=Python.read_pip_file("../requirements.txt"))
42+
env3 = Python(
4343
requirements=["tensorflow"],
4444
env_vars=["CUDA_VISIBLE_DEVICES"],
4545
)
4646
4747
"""
48-
def __init__(self, requirements=None, constraints=None, env_vars=None, _autocapture=True):
48+
def __init__(self, requirements, constraints=None, env_vars=None, _autocapture=True):
4949
super(Python, self).__init__(env_vars, _autocapture)
5050

5151
if _autocapture:
5252
self._capture_python_version()
53-
if requirements is not None or _autocapture:
53+
if requirements or _autocapture:
5454
self._capture_requirements(requirements)
55-
if constraints is not None:
55+
if constraints:
5656
self._capture_constraints(constraints)
5757

5858
def __repr__(self):
@@ -105,7 +105,7 @@ def __repr__(self):
105105

106106
@classmethod
107107
def _from_proto(cls, blob_msg):
108-
obj = cls(_autocapture=False)
108+
obj = cls(requirements=[], _autocapture=False)
109109
obj._msg.CopyFrom(blob_msg.environment)
110110

111111
return obj
@@ -175,11 +175,8 @@ def _capture_python_version(self):
175175
self._msg.python.version.patch = sys.version_info.micro
176176

177177
def _capture_requirements(self, requirements):
178-
if requirements is None:
179-
# TODO: support conda
180-
req_specs = self.read_pip_environment()
181-
elif (isinstance(requirements, list)
182-
and all(isinstance(req, six.string_types) for req in requirements)):
178+
if (isinstance(requirements, list)
179+
and all(isinstance(req, six.string_types) for req in requirements)):
183180
req_specs = copy.copy(requirements)
184181
_pip_requirements_utils.process_requirements(req_specs)
185182
else:

client/workflows/examples/versioning/01 Simple Sentiment Classfier.ipynb

+1-1
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@
303303
"code_ver = Notebook() # Notebook & git environment\n",
304304
"config_ver = Hyperparameters({'n_iter': 20})\n",
305305
"dataset_ver = S3(\"s3://{}/{}\".format(S3_BUCKET, S3_KEY))\n",
306-
"env_ver = Python() # pip environment and Python version"
306+
"env_ver = Python(Python.read_pip_environment()) # pip environment and Python version"
307307
]
308308
},
309309
{

client/workflows/examples/versioning/02 Reverting Training Data.ipynb

+1-1
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@
249249
"code_ver = Notebook() # Notebook & git environment\n",
250250
"config_ver = Hyperparameters({'n_iter': 20})\n",
251251
"dataset_ver = S3(\"s3://{}/{}\".format(S3_BUCKET, S3_KEY))\n",
252-
"env_ver = Python() # pip environment and Python version"
252+
"env_ver = Python(Python.read_pip_environment()) # pip environment and Python version"
253253
]
254254
},
255255
{

client/workflows/examples/versioning/03 Merging Multilingual Support.ipynb

+1-1
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@
309309
" \"s3://{}/{}\".format(S3_BUCKET, EN_S3_KEY),\n",
310310
" \"s3://{}/{}\".format(S3_BUCKET, DE_S3_KEY),\n",
311311
"])\n",
312-
"env_ver = Python() # pip environment and Python version"
312+
"env_ver = Python(Python.read_pip_environment()) # pip environment and Python version"
313313
]
314314
},
315315
{

demos/webinar-2020-4-1/census-s3-oss-versioning.ipynb

+1-1
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@
257257
" config_ver = Hyperparameters(hyperparams)\n",
258258
" dataset_ver_train = S3(\"s3://{}/{}\".format(\"verta-starter\", \"census-train.csv\"))\n",
259259
" dataset_ver_test = S3(\"s3://{}/{}\".format(\"verta-starter\", \"census-test.csv\"))\n",
260-
" env_ver = Python()\n",
260+
" env_ver = Python(Python.read_pip_environment())\n",
261261
"\n",
262262
" commit.update(\"notebooks/census-s3-example\", code_ver)\n",
263263
" commit.update(\"config/hyperparams\", config_ver)\n",

demos/webinar-2020-5-6/02-mdb_versioned/01-train/01 Basic NLP.ipynb

+1-1
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@
303303
"code_ver = Notebook() # Notebook & git environment\n",
304304
"config_ver = Hyperparameters({'n_iter': 20})\n",
305305
"dataset_ver = S3(\"s3://{}/{}\".format(S3_BUCKET, S3_KEY))\n",
306-
"env_ver = Python() # pip environment and Python version"
306+
"env_ver = Python(Python.read_pip_environment()) # pip environment and Python version"
307307
]
308308
},
309309
{

demos/webinar-2020-5-6/02-mdb_versioned/01-train/02 Positive Data NLP.ipynb

+1-1
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@
249249
"code_ver = Notebook() # Notebook & git environment\n",
250250
"config_ver = Hyperparameters({'n_iter': 20})\n",
251251
"dataset_ver = S3(\"s3://{}/{}\".format(S3_BUCKET, S3_KEY))\n",
252-
"env_ver = Python() # pip environment and Python version"
252+
"env_ver = Python(Python.read_pip_environment()) # pip environment and Python version"
253253
]
254254
},
255255
{

demos/webinar-2020-5-6/02-mdb_versioned/01-train/03 Multilingual NLP.ipynb

+1-1
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@
309309
" \"s3://{}/{}\".format(S3_BUCKET, EN_S3_KEY),\n",
310310
" \"s3://{}/{}\".format(S3_BUCKET, DE_S3_KEY),\n",
311311
"])\n",
312-
"env_ver = Python() # pip environment and Python version"
312+
"env_ver = Python(Python.read_pip_environment()) # pip environment and Python version"
313313
]
314314
},
315315
{

0 commit comments

Comments
 (0)