{"id":50,"library":"ncloud-sdk-python","title":"Naver Cloud Platform Python SDK","description":"Official Python SDK for Naver Cloud Platform (NCP) — South Korea's primary cloud provider, equivalent to AWS in the Korean market. Provides programmatic access to NCP infrastructure services: servers, VPC, CDN, DNS, Object Storage, and more. The SDK is split into service-specific packages (ncloud-server, ncloud-vserver, ncloud-vpc, ncloud-cdn, etc.) — install only the services you need. IMPORTANT: NCP has two distinct environments — Classic and VPC — with separate SDK modules, different API endpoints, and incompatible APIs. ncloud-server targets Classic, ncloud-vserver targets VPC. New accounts should use VPC.","status":"active","version":"2.8.1 (ncloud meta-package)","language":"python","source_language":"ko","source_url":"https://github.com/NaverCloudPlatform/ncloud-sdk-python","tags":["naver","ncloud","korea","cloud","infrastructure","vpc","server","cdn","korean-cloud","aws-alternative"],"install":[{"cmd":"pip install ncloud","lang":"bash","label":"Top-level meta package (installs ncloud-apikey and core utilities)"},{"cmd":"pip install ncloud-vserver ncloud-vpc ncloud-apikey","lang":"bash","label":"VPC environment — recommended for new accounts (server + networking)"},{"cmd":"pip install ncloud-server ncloud-apikey","lang":"bash","label":"Classic environment — legacy, use only if account predates VPC"},{"cmd":"pip install ncloud-cdn ncloud-apikey","lang":"bash","label":"CDN service (available in both Classic and VPC)"}],"dependencies":[{"reason":"Required. Handles credential loading from config file, environment variables, or Server Role metadata.","package":"ncloud-apikey","optional":false},{"reason":"Required. HTTP transport for all API calls.","package":"urllib3","optional":false},{"reason":"Required. Date/time parsing in API responses.","package":"python-dateutil","optional":false}],"imports":[{"note":"VPC and Classic environments use completely different modules. ncloud_server = Classic. ncloud_vserver = VPC. Mixing them results in wrong API endpoints being called.","wrong":"import ncloud_server  # This is Classic environment, not VPC","symbol":"ncloud_vserver (VPC servers)","correct":"import ncloud_vserver\nfrom ncloud_vserver.api.v2_api import V2Api"}],"quickstart":{"code":"# Step 1: Set up credentials\n# Option A: Config file at ~/.ncloud/configure\n# [DEFAULT]\n# ncloud_access_key_id = YOUR_ACCESS_KEY\n# ncloud_secret_access_key = YOUR_SECRET_KEY\n\n# Option B: Environment variables\n# export NCLOUD_ACCESS_KEY_ID=YOUR_ACCESS_KEY\n# export NCLOUD_SECRET_KEY=YOUR_SECRET_KEY\n\n# Step 2: VPC Server operations (recommended for new accounts)\nimport ncloud_vserver\nfrom ncloud_vserver.api.v2_api import V2Api\nfrom ncloud_vserver.rest import ApiException\nimport ncloud_apikey\n\n# Load credentials from config file or env vars\napikeys = ncloud_apikey.ncloud_key.NcloudKey().keys()\n\nconfiguration = ncloud_vserver.Configuration()\nconfiguration.access_key = apikeys['access_key']\nconfiguration.secret_key = apikeys['secret_key']\n\napi = V2Api(ncloud_vserver.ApiClient(configuration))\n\n# List server instances\ntry:\n    response = api.get_server_instance_list(\n        ncloud_vserver.GetServerInstanceListRequest()\n    )\n    for server in response.get_server_instance_list_response.server_instance_list:\n        print(server.server_name, server.server_instance_status.code_name)\nexcept ApiException as e:\n    print(f'API error: {e}')\n\n# Create a server instance (VPC)\ntry:\n    request = ncloud_vserver.CreateServerInstancesRequest(\n        vpc_no='YOUR_VPC_NO',\n        subnet_no='YOUR_SUBNET_NO',\n        server_image_product_code='SW.VSVR.OS.LNX64.CNTOS.0703.B050',  # CentOS 7\n        server_product_code='SVR.VSVR.STAND.C002.M008.NET.SSD050.B050.G002',\n    )\n    response = api.create_server_instances(request)\n    print(response)\nexcept ApiException as e:\n    print(f'Create error: {e}')\n\n# Classic environment (legacy — use only if on Classic account)\nimport ncloud_server\nfrom ncloud_server.api.v2_api import V2Api as ClassicV2Api\n\nclassic_config = ncloud_server.Configuration()\nclassic_config.access_key = apikeys['access_key']\nclassic_config.secret_key = apikeys['secret_key']\n\nclassic_api = ClassicV2Api(ncloud_server.ApiClient(classic_config))\ntry:\n    response = classic_api.get_server_instance_list(\n        ncloud_server.GetServerInstanceListRequest()\n    )\nexcept ApiException as e:\n    print(f'Classic API error: {e}')\n\n# CDN (works for both Classic and VPC)\nimport ncloud_cdn\nfrom ncloud_cdn.api.v2_api import V2Api as CdnV2Api\n\ncdn_config = ncloud_cdn.Configuration()\ncdn_config.access_key = apikeys['access_key']\ncdn_config.secret_key = apikeys['secret_key']\n\ncdn_api = CdnV2Api(ncloud_cdn.ApiClient(cdn_config))\ntry:\n    response = cdn_api.get_cdn_plus_instance_list(\n        ncloud_cdn.GetCdnPlusInstanceListRequest()\n    )\n    print(response)\nexcept ApiException as e:\n    print(f'CDN error: {e}')","lang":"python","description":"Always use ncloud-vserver (VPC) for new projects. ncloud-server (Classic) is legacy. Product codes for server images and instance types must be retrieved via API (getServerImageProductList, getServerProductList) — they are not human-readable strings and differ between Classic and VPC environments."},"warnings":[{"fix":"New accounts: always use ncloud-vserver (VPC). Check your account type in the NCP console. If you created your account after 2020, it is almost certainly VPC.","message":"Classic and VPC environments are completely separate API surfaces with different modules, endpoints, and product codes. ncloud-server (Classic) and ncloud-vserver (VPC) are NOT interchangeable. Classic uses 'https://ncloud.apigw.ntruss.com/server/v2', VPC uses 'https://ncloud.apigw.ntruss.com/vserver/v2'. Calling Classic APIs on a VPC account or vice versa returns auth or resource-not-found errors.","severity":"breaking","affected_versions":"all"},{"fix":"Always fetch current product codes dynamically via getServerImageProductList() and getServerProductList() before creating instances. Cache the results but don't hardcode them.","message":"Server image product codes and server product codes are not human-readable strings — they are opaque codes like 'SW.VSVR.OS.LNX64.CNTOS.0703.B050'. These codes differ between Classic and VPC environments and can change over time as Naver deprecates older images. Hardcoding them will break when Naver retires the image.","severity":"gotcha","affected_versions":"all"},{"fix":"Install only the service-specific packages you need: pip install ncloud-vserver ncloud-apikey for VPC servers, plus additional packages per service.","message":"The README installation instruction says 'pip install Setuptools' which is misleading — this is a general Python build tool, not the NCP SDK. Each NCP service is a separate PyPI package (ncloud-server, ncloud-vserver, ncloud-vpc, ncloud-cdn, etc.). There is no single 'pip install ncloud-sdk' that installs everything.","severity":"gotcha","affected_versions":"all"},{"fix":"Set credentials via environment variables in CI/CD. Use ~/.ncloud/configure for local dev. The config file can be generated via the Ncloud CLI: ncloud configure.","message":"Credential loading order via ncloud_apikey.NcloudKey() is: (1) environment variables NCLOUD_ACCESS_KEY_ID / NCLOUD_SECRET_KEY, (2) config file at ~/.ncloud/configure, (3) Server Role metadata (VPC only). If none are present, the SDK raises a generic exception with no clear message about missing credentials.","severity":"gotcha","affected_versions":"all"},{"fix":"Use English docs at api.ncloud-docs.com for API reference. For service-specific guides and troubleshooting, the Korean docs at guide.ncloud-docs.com are more complete.","message":"NCP console, documentation, and support are primarily in Korean. English documentation at api.ncloud-docs.com exists but is less comprehensive and may lag behind Korean docs for newer services.","severity":"gotcha","affected_versions":"all"},{"fix":"Specify the region explicitly when creating resources. Default region is KR if not specified.","message":"NCP regions are Korea-centric. Primary region is KR (Korea). Additional regions include SGN (Singapore), JPN (Japan), USWN (US West), and DE (Germany). Not all services are available in all regions. Region availability must be checked per service.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-12T05:59:01.297Z","next_check":"2026-06-01T00:00:00.000Z","problems":[{"fix":"Install the specific service package you intend to use. For example, for Classic Server services:\n`pip install ncloud-server`\nFor VPC Server services:\n`pip install ncloud-vserver`","cause":"This error occurs when the `ncloud-server` package, or another service-specific package, has not been installed, or the Python environment where it was installed is not active. The `ncloud-sdk-python` is a meta-package; individual service packages like `ncloud-server` or `ncloud-vserver` must be installed separately.","error":"ModuleNotFoundError: No module named 'ncloud_server'"},{"fix":"Ensure your `access_key` and `secret_key` are correctly set in your SDK configuration. Verify that these keys are active and have the required permissions in the Naver Cloud Platform console (My Account > Manage account and security > Manage access). Also, check for any IP access restrictions that might be blocking your connection.","cause":"This API error indicates that your request lacks valid authentication credentials (Access Key ID and Secret Key) or that the provided credentials are incorrect, expired, or do not have the necessary permissions to access the requested resource. It can also occur if the credentials are not properly configured or if there are IP access restrictions set on the Naver Cloud Platform console.","error":"ApiException: (401) Reason: Unauthorized"},{"fix":"Review the Naver Cloud Platform API documentation for the specific service and operation you are trying to perform. Confirm whether you are targeting the Classic or VPC environment and ensure that your request parameters, API endpoint, and the SDK module (e.g., `ncloud-server` for Classic vs. `ncloud-vserver` for VPC) align with that environment's specifications. Check for any typos in parameter names or incorrect data types/formats for parameter values.","cause":"This error often arises when there's a mismatch between the API you are calling (e.g., a Classic environment API) and the server type or parameters you are providing (e.g., using VPC-specific parameters with a Classic API or vice-versa), or if a required parameter is missing or malformed. Naver Cloud Platform has distinct Classic and VPC environments with incompatible APIs.","error":"ApiException: (400) Reason: Bad Request, message: Invalid request parameter"},{"fix":"Verify the exact class name and its availability within the imported module by checking the official SDK documentation or the `__init__.py` files of the service package. Ensure you are importing the correct service client and API class for your intended operation. For instance, the common pattern is to import from the service package directly and instantiate the `V2Api`:\n`import ncloud_server`\n`api_instance = ncloud_server.V2Api(...)`\nOr from `ncloud_vserver` for VPC.","cause":"This error occurs when you try to access a class or attribute that does not exist within the imported module, or if there's a version incompatibility. In the case of `ncloud-sdk-python`, it usually means you're trying to use a method or class (like `V2Api`) from a module that doesn't expose it, or the import path is incorrect.","error":"AttributeError: module 'ncloud_server' has no attribute 'V2Api'"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.43,"mem_mb":10.8,"disk_size":"74.4M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.29,"mem_mb":10.8,"disk_size":"146M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.59,"mem_mb":12.3,"disk_size":"81.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.48,"mem_mb":12.3,"disk_size":"153M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.52,"mem_mb":12.1,"disk_size":"72.2M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.52,"mem_mb":12.1,"disk_size":"143M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.49,"mem_mb":12.1,"disk_size":"68.5M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.48,"mem_mb":12.1,"disk_size":"142M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.4,"mem_mb":10.1,"disk_size":"73.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.32,"mem_mb":10.1,"disk_size":"145M"}]},"quickstart_checks":{"last_tested":"2026-05-12","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}