@@ -22,25 +22,19 @@ function installRequirements(requirementsPath, targetFolder, serverless, service
22
22
fse . ensureDirSync ( targetRequirementsFolder ) ;
23
23
24
24
const dotSlsReqs = path . join ( targetFolder , 'requirements.txt' ) ;
25
- let fileName = requirementsPath ;
26
25
if ( options . usePipenv && fse . existsSync ( path . join ( servicePath , 'Pipfile' ) ) ) {
27
- fileName = dotSlsReqs ;
26
+ generateRequirementsFile ( dotSlsReqs , dotSlsReqs , options ) ;
27
+ } else {
28
+ generateRequirementsFile ( requirementsPath , dotSlsReqs , options ) ;
28
29
}
29
30
30
31
serverless . cli . log ( `Installing requirements of ${ requirementsPath } in ${ targetFolder } ...` ) ;
31
32
32
- // In case the requirements file is a symlink, copy it to targetFolder
33
- // if using docker to avoid errors
34
- if ( options . dockerizePip && fileName !== dotSlsReqs ) {
35
- fse . copySync ( fileName , dotSlsReqs ) ;
36
- fileName = dotSlsReqs ;
37
- }
38
-
39
33
let cmd ;
40
34
let cmdOptions ;
41
35
let pipCmd = [
42
36
options . pythonBin , '-m' , 'pip' , '--isolated' , 'install' ,
43
- '-t' , targetRequirementsFolder , '-r' , fileName ,
37
+ '-t' , targetRequirementsFolder , '-r' , dotSlsReqs ,
44
38
...options . pipCmdExtraArgs ,
45
39
] ;
46
40
if ( ! options . dockerizePip ) {
@@ -122,6 +116,21 @@ function installRequirements(requirementsPath, targetFolder, serverless, service
122
116
}
123
117
} ;
124
118
119
+ /**
120
+ * create a filtered requirements.txt without anything from noDeploy
121
+ * @param {string } source requirements
122
+ * @param {string } target requirements where results are written
123
+ * @param {Object } options
124
+ */
125
+ function generateRequirementsFile ( source , target , options ) {
126
+ const noDeploy = new Set ( options . noDeploy || [ ] ) ;
127
+ const requirements = fse . readFileSync ( source , { encoding : 'utf-8' } ) . split ( / \r ? \n / ) ;
128
+ const filteredRequirements = requirements . filter ( ( req ) => {
129
+ return ! noDeploy . has ( req . split ( / [ = < > \t ] / ) [ 0 ] . trim ( ) ) ;
130
+ } ) ;
131
+ fse . writeFileSync ( target , filteredRequirements . join ( '\n' ) ) ;
132
+ }
133
+
125
134
/**
126
135
* pip install the requirements to the .serverless/requirements directory
127
136
* @return {undefined }
0 commit comments