code: function injectRequirements(requirementsPath, packagePath, options) {
    const noDeploy = new Set(options.noDeploy || []);
  
    return fse
      .readFileAsync(packagePath)
      .then(buffer => JSZip.loadAsync(buffer))
      .then(zip =>
        BbPromise.resolve(
          glob.sync([path.join(requirementsPath, '**')], {
            mark: true,
            dot: true
          })
        )
          .map(file => [file, path.relative(requirementsPath, file)])
          .filter(
            ([file, relativeFile]) =>
              !file.endsWith('/') &&
              !relativeFile.match(/^__pycache__[\\/]/) &&
              !noDeploy.has(relativeFile.split(/([-\\/]|\.py$|\.pyc$)/, 1)[0])
          )
          .map(([file, relativeFile]) =>
            Promise.all([file, relativeFile, fse.statAsync(file)])
          )
          .map(([file, relativeFile, fileStat]) =>
            zipFile(zip, relativeFile, fse.readFileAsync(file), {
              unixPermissions: fileStat.mode
            })
          )
          .then(() => writeZip(zip, packagePath))
      );
  }
docs: Inject requirements into packaged application.
  @param {string} requirementsPath requirements folder path
  @param {string} packagePath target package path
  @param {Object} options our options object
  @return {Promise} the JSZip object constructed.