From 67b26ae93df531d723ed861278afd8459b9d7cbb Mon Sep 17 00:00:00 2001 From: Amir Szekely Date: Mon, 26 Feb 2018 19:10:25 -0800 Subject: [PATCH 1/2] Fix paths for Docker on Windows When using on Windows with the default docker configuration, it passes `.serverless\\requirements.txt` to `docker ... pip install ...`. This results in the following error: ``` Could not open requirements file: [Errno 22] Invalid argument: '.serverless\\requirements.txt' ``` To fix this, we can convert the paths from Windows style to Linux style when running on Windows with `dockerZip: true`. --- lib/pip.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/pip.js b/lib/pip.js index ba07670c..821cde48 100644 --- a/lib/pip.js +++ b/lib/pip.js @@ -40,7 +40,7 @@ function installRequirements(requirementsPath, targetFolder, serverless, service let cmdOptions; let pipCmd = [ options.pythonBin, '-m', 'pip', '--isolated', 'install', - '-t', targetRequirementsFolder, '-r', fileName, + '-t', dockerPathForWin(options, targetRequirementsFolder), '-r', dockerPathForWin(options, fileName), ...options.pipCmdExtraArgs, ]; if (!options.dockerizePip) { @@ -122,6 +122,13 @@ function installRequirements(requirementsPath, targetFolder, serverless, service } }; +function dockerPathForWin(options, path) { + if (process.platform === 'win32' && options.dockerizePip) { + return path.replace('\\', '/'); + } + return path; +} + /** * pip install the requirements to the .serverless/requirements directory * @return {undefined} From 2077e910b384e96fa0a702e9f62bb7217a9e625f Mon Sep 17 00:00:00 2001 From: Amir Szekely Date: Mon, 26 Feb 2018 19:16:02 -0800 Subject: [PATCH 2/2] Fix lint errors --- lib/pip.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/pip.js b/lib/pip.js index 821cde48..aa337b7f 100644 --- a/lib/pip.js +++ b/lib/pip.js @@ -40,7 +40,8 @@ function installRequirements(requirementsPath, targetFolder, serverless, service let cmdOptions; let pipCmd = [ options.pythonBin, '-m', 'pip', '--isolated', 'install', - '-t', dockerPathForWin(options, targetRequirementsFolder), '-r', dockerPathForWin(options, fileName), + '-t', dockerPathForWin(options, targetRequirementsFolder), + '-r', dockerPathForWin(options, fileName), ...options.pipCmdExtraArgs, ]; if (!options.dockerizePip) { @@ -122,6 +123,12 @@ function installRequirements(requirementsPath, targetFolder, serverless, service } }; +/** + * convert path from Windows style to Linux style, if needed + * @param {Object} options + * @param {string} path + * @return {string} + */ function dockerPathForWin(options, path) { if (process.platform === 'win32' && options.dockerizePip) { return path.replace('\\', '/');