snow snowpark build¶

Builds artifacts required for the Snowpark project. The artifacts can be used by deploy command. For each directory in artifacts a .zip file is created. All non-anaconda dependencies are packaged in dependencies.zip file.

Syntax¶

snow snowpark build
  --ignore-anaconda
  --allow-shared-libraries
  --index-url <index_url>
  --skip-version-check
  --project <project_definition>
  --env <env_overrides>
  --connection <connection>
  --host <host>
  --port <port>
  --account <account>
  --user <user>
  --password <password>
  --authenticator <authenticator>
  --private-key-file <private_key_file>
  --token-file-path <token_file_path>
  --database <database>
  --schema <schema>
  --role <role>
  --warehouse <warehouse>
  --temporary-connection
  --mfa-passcode <mfa_passcode>
  --enable-diag
  --diag-log-path <diag_log_path>
  --diag-allowlist-path <diag_allowlist_path>
  --format <format>
  --verbose
  --debug
  --silent
Copy

Arguments¶

None

Options¶

--ignore-anaconda

Does not lookup packages on Snowflake Anaconda channel. Default: False.

--allow-shared-libraries

Allows shared (.so) libraries, when using packages installed through PIP. Default: False.

--index-url TEXT

Base URL of the Python Package Index to use for package lookup. This should point to a repository compliant with PEP 503 (the simple repository API) or a local directory laid out in the same format.

--skip-version-check

Skip comparing versions of dependencies between requirements and Anaconda. Default: False.

-p, --project TEXT

Path where Snowflake project resides. Defaults to current working directory.

--env TEXT

String in format of key=value. Overrides variables from env section used for templates. Default: [].

--connection, -c, --environment TEXT

Name of the connection, as defined in your config.toml. Default: default.

--host TEXT

Host address for the connection. Overrides the value specified for the connection.

--port INTEGER

Port for the connection. Overrides the value specified for the connection.

--account, --accountname TEXT

Name assigned to your Snowflake account. Overrides the value specified for the connection.

--user, --username TEXT

Username to connect to Snowflake. Overrides the value specified for the connection.

--password TEXT

Snowflake password. Overrides the value specified for the connection.

--authenticator TEXT

Snowflake authenticator. Overrides the value specified for the connection.

--private-key-file, --private-key-path TEXT

Snowflake private key file path. Overrides the value specified for the connection.

--token-file-path TEXT

Path to file with an OAuth token that should be used when connecting to Snowflake.

--database, --dbname TEXT

Database to use. Overrides the value specified for the connection.

--schema, --schemaname TEXT

Database schema to use. Overrides the value specified for the connection.

--role, --rolename TEXT

Role to use. Overrides the value specified for the connection.

--warehouse TEXT

Warehouse to use. Overrides the value specified for the connection.

--temporary-connection, -x

Uses connection defined with command line parameters, instead of one defined in config. Default: False.

--mfa-passcode TEXT

Token to use for multi-factor authentication (MFA).

--enable-diag

Run python connector diagnostic test. Default: False.

--diag-log-path TEXT

Diagnostic report path. Default: <temporary_directory>.

--diag-allowlist-path TEXT

Diagnostic report path to optional allowlist.

--format [TABLE|JSON]

Specifies the output format. Default: TABLE.

--verbose, -v

Displays log entries for log levels info and higher. Default: False.

--debug

Displays log entries for log levels debug and higher; debug logs contains additional information. Default: False.

--silent

Turns off intermediate output to console. Default: False.

--help

Displays the help text for this command.

Usage notes¶

  • The app.zip contains everything needed to run the functions and procedures in the project, apart from packages available through Snowflake Anaconda channel, which you can call directly from Snowflake.-

  • The command parses requirements.txt for packages available on Conda channel. This process creates the requirements.snowflake.txt file that contains project dependencies available on the Conda channel, which is later used by the snow snowpark deploy command.

  • By default, the command looks for the snowflake.yml file in the current directory. Alternatively, you can specify a different path with the --project option.

  • This command automatically downloads dependencies and adds them to a file called app.zip, together with project source code (specified by the src field in the snowflake.yml file.

  • To use different Python Package Index than PyPi, specify one using the --index-url option.

  • You can use --skip-version-check option to skip version requirements between project dependencies and the Anaconda Channel.

  • You can use the --ignore-anaconda option to include all the required dependencies in the app.zip file, even those available in Snowflake Anaconda channel. The dependencies aren’t downloaded from Anaconda, but from PyPi.

  • The --allow-shared-libraries option checks whether any of the packages downloaded from PyPi are using native dependencies, which can cause problems as Snowpark currently supports only native dependencies for packages taken from Conda channel

Examples¶

  • Build a project located in the current directory:

    snow snowpark build
    
    Copy
    Build done. Artifact path: /Path/to/current/dir/project_dir/app.zip
    
  • Build a project located in a different directory:

    ls
    
    Copy
    project_dir    some_other_dir    some_file.txt
    
    snow snowpark build -p project_dir
    
    Copy
    Build done. Artifact path: /Path/to/current/dir/project_dir/app.zip
    
  • Build a project in a directory with no snowflake.yml project definition:

    ls
    
    Copy
    project_dir    some_other_dir    some_file.txt
    
    snow snowpark build
    
    Copy
    ╭─ Error ──────────────────────────────────────────────────────────╮
      Cannot find project definition (snowflake.yml). Please provide
      a path to the project or run this command in a valid
      project directory.
    ╰──────────────────────────────────────────────────────────────────╯
    
  • Build a project with native libraries:

    snow snowpark build --ignore-anaconda --allow-shared-libraries
    
    Copy
    2024-04-16 16:05:52 ERROR Following dependencies utilise shared libraries, not supported by Conda:
    2024-04-16 16:05:52 ERROR contourpy
    pillow
    numpy
    kiwisolver
    fonttools
    matplotlib
    2024-04-16 16:05:52 ERROR You may still try to create your package with --allow-shared-libraries, but the might not work.
    2024-04-16 16:05:52 ERROR You may also request adding the package to Snowflake Conda channel
    2024-04-16 16:05:52 ERROR at https://support.anaconda.com/
    Build done. Artifact path: /Path/to/current/dir/project_dir/app.zip
    
  • Build a project and include all dependencies:

    snow snowpark build --ignore-anaconda
    
    Copy
    Build done. Artifact path: /Path/to/current/dir/project_dir/app.zip