[{"data":1,"prerenderedAt":1325},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fsetup-install":412,"\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fsetup-install-surround":1320},[4,315,366,393],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":168},"Docs","i-lucide-book-open","\u002Fdocs","1.docs",[10,34,65,120,144,170,246,254,279],{"title":11,"path":12,"stem":13,"children":14,"icon":33},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[15,17,21,25,29],{"title":11,"path":12,"stem":13,"icon":16},"i-lucide-house",{"title":18,"path":19,"stem":20},"Register a User","\u002Fdocs\u002Fgetting-started\u002Fregister-a-user","1.docs\u002F1.getting-started\u002F2.register-a-user",{"title":22,"path":23,"stem":24},"Platform Overview","\u002Fdocs\u002Fgetting-started\u002Fplatform-overview","1.docs\u002F1.getting-started\u002F3.platform-overview",{"title":26,"path":27,"stem":28},"Create an Organisation","\u002Fdocs\u002Fgetting-started\u002Fcreate-an-organisation","1.docs\u002F1.getting-started\u002F4.create-an-organisation",{"title":30,"path":31,"stem":32},"Quickstarts","\u002Fdocs\u002Fgetting-started\u002Fquickstarts","1.docs\u002F1.getting-started\u002F5.quickstarts","i-lucide-rocket",{"title":35,"path":36,"stem":37,"children":38,"icon":64},"Admin Center","\u002Fdocs\u002Finfuse-cloud","1.docs\u002F2.infuse-cloud\u002F1.index",[39,40,44,48,52,56,60],{"title":35,"path":36,"stem":37},{"title":41,"path":42,"stem":43},"Create or Switch Organisations","\u002Fdocs\u002Finfuse-cloud\u002Fcreate-or-switch-organisations","1.docs\u002F2.infuse-cloud\u002F2.create-or-switch-organisations",{"title":45,"path":46,"stem":47},"Organisation Profile","\u002Fdocs\u002Finfuse-cloud\u002Forganisation-profile","1.docs\u002F2.infuse-cloud\u002F3.organisation-profile",{"title":49,"path":50,"stem":51},"Members and Invitations","\u002Fdocs\u002Finfuse-cloud\u002Fmembers-and-invitations","1.docs\u002F2.infuse-cloud\u002F4.members-and-invitations",{"title":53,"path":54,"stem":55},"Member Roles","\u002Fdocs\u002Finfuse-cloud\u002Fmember-roles","1.docs\u002F2.infuse-cloud\u002F5.member-roles",{"title":57,"path":58,"stem":59},"API Access","\u002Fdocs\u002Finfuse-cloud\u002Fapi-access","1.docs\u002F2.infuse-cloud\u002F6.api-access",{"title":61,"path":62,"stem":63},"Webhooks","\u002Fdocs\u002Finfuse-cloud\u002Fwebhooks","1.docs\u002F2.infuse-cloud\u002F7.webhooks","i-lucide-building-2",{"title":66,"path":67,"stem":68,"children":69,"icon":119},"Infuse-IoT Cloud","\u002Fdocs\u002Finfuse-iot-cloud","1.docs\u002F3.infuse-iot-cloud\u002F1.index",[70,71,75,79,83,87,91,95,99,103,107,111,115],{"title":66,"path":67,"stem":68},{"title":72,"path":73,"stem":74},"Provisioning","\u002Fdocs\u002Finfuse-iot-cloud\u002Fprovisioning","1.docs\u002F3.infuse-iot-cloud\u002F10.provisioning",{"title":76,"path":77,"stem":78},"Connectivity","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconnectivity","1.docs\u002F3.infuse-iot-cloud\u002F11.connectivity",{"title":80,"path":81,"stem":82},"Definitions","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdefinitions","1.docs\u002F3.infuse-iot-cloud\u002F12.definitions",{"title":84,"path":85,"stem":86},"Telemetry","\u002Fdocs\u002Finfuse-iot-cloud\u002Ftelemetry","1.docs\u002F3.infuse-iot-cloud\u002F13.telemetry",{"title":88,"path":89,"stem":90},"Console","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconsole","1.docs\u002F3.infuse-iot-cloud\u002F2.console",{"title":92,"path":93,"stem":94},"Concepts","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconcepts","1.docs\u002F3.infuse-iot-cloud\u002F3.concepts",{"title":96,"path":97,"stem":98},"Boards","\u002Fdocs\u002Finfuse-iot-cloud\u002Fboards","1.docs\u002F3.infuse-iot-cloud\u002F4.boards",{"title":100,"path":101,"stem":102},"Networks","\u002Fdocs\u002Finfuse-iot-cloud\u002Fnetworks","1.docs\u002F3.infuse-iot-cloud\u002F5.networks",{"title":104,"path":105,"stem":106},"Devices","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdevices","1.docs\u002F3.infuse-iot-cloud\u002F6.devices",{"title":108,"path":109,"stem":110},"Device Configuration","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdevice-configuration","1.docs\u002F3.infuse-iot-cloud\u002F7.device-configuration",{"title":112,"path":113,"stem":114},"Applications and Releases","\u002Fdocs\u002Finfuse-iot-cloud\u002Fapplications-and-releases","1.docs\u002F3.infuse-iot-cloud\u002F8.applications-and-releases",{"title":116,"path":117,"stem":118},"Commands","\u002Fdocs\u002Finfuse-iot-cloud\u002Fcommands","1.docs\u002F3.infuse-iot-cloud\u002F9.commands","i-lucide-radio-tower",{"title":121,"path":122,"stem":123,"children":124,"icon":143},"Infuse DB","\u002Fdocs\u002Finfuse-db","1.docs\u002F4.infuse-db\u002F1.index",[125,127,131,135,139],{"title":126,"path":122,"stem":123},"Infuse-DB",{"title":128,"path":129,"stem":130},"Datasets","\u002Fdocs\u002Finfuse-db\u002Fdatasets","1.docs\u002F4.infuse-db\u002F2.datasets",{"title":132,"path":133,"stem":134},"Ingestion","\u002Fdocs\u002Finfuse-db\u002Fingestion","1.docs\u002F4.infuse-db\u002F3.ingestion",{"title":136,"path":137,"stem":138},"Querying","\u002Fdocs\u002Finfuse-db\u002Fquerying","1.docs\u002F4.infuse-db\u002F4.querying",{"title":140,"path":141,"stem":142},"Retention","\u002Fdocs\u002Finfuse-db\u002Fretention","1.docs\u002F4.infuse-db\u002F5.retention","i-lucide-database",{"title":145,"path":146,"stem":147,"children":148,"icon":169},"Infuse-IoT SDK","\u002Fdocs\u002Finfuse-iot-sdk","1.docs\u002F4.infuse-iot-sdk\u002F1.index",[149,151,154],{"title":150,"path":146,"stem":147},"Embedded Tools",{"title":145,"path":152,"stem":153},"\u002Fdocs\u002Finfuse-iot-sdk\u002Fsdk-reference","1.docs\u002F4.infuse-iot-sdk\u002F2.sdk-reference",{"title":155,"icon":156,"path":157,"stem":158,"children":159,"page":168},"Infuse-IoT Python Tools","i-simple-icons-python","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools",[160,164],{"title":161,"path":162,"stem":163},"Python Tools","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fpython-tools","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F1.python-tools",{"title":165,"path":166,"stem":167},"Install & Setup","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fsetup-install","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F2.setup-install",false,"i-lucide-cpu",{"title":171,"path":172,"stem":173,"children":174,"icon":245},"Marketplace","\u002Fdocs\u002Fmarketplace","1.docs\u002F5.marketplace\u002F1.index",[175,177,181,185,213],{"title":176,"path":172,"stem":173},"Infuse-Marketplace",{"title":178,"path":179,"stem":180},"Infuse-Marketplace Instances","\u002Fdocs\u002Fmarketplace\u002Finstances","1.docs\u002F5.marketplace\u002F2.instances",{"title":182,"path":183,"stem":184},"Infuse-Marketplace Roles","\u002Fdocs\u002Fmarketplace\u002Froles","1.docs\u002F5.marketplace\u002F3.roles",{"title":186,"path":187,"stem":188,"children":189,"icon":212},"Developers","\u002Fdocs\u002Fmarketplace\u002Fdevelopers","1.docs\u002F5.marketplace\u002Fdevelopers\u002F1.index",[190,192,196,200,204,208],{"title":191,"path":187,"stem":188},"Infuse-Marketplace Developers",{"title":193,"path":194,"stem":195},"Create an App or Algorithm","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fcreate-product","1.docs\u002F5.marketplace\u002Fdevelopers\u002F2.create-product",{"title":197,"path":198,"stem":199},"Upload Assets","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fupload-assets","1.docs\u002F5.marketplace\u002Fdevelopers\u002F3.upload-assets",{"title":201,"path":202,"stem":203},"Releases and Versions","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Freleases-and-versions","1.docs\u002F5.marketplace\u002Fdevelopers\u002F4.releases-and-versions",{"title":205,"path":206,"stem":207},"Pricing","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fpricing","1.docs\u002F5.marketplace\u002Fdevelopers\u002F5.pricing",{"title":209,"path":210,"stem":211},"Publish an App or Algorithm","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fpublish-product","1.docs\u002F5.marketplace\u002Fdevelopers\u002F6.publish-product","i-lucide-code-2",{"title":214,"path":215,"stem":216,"children":217,"icon":244},"Providers","\u002Fdocs\u002Fmarketplace\u002Fproviders","1.docs\u002F5.marketplace\u002Fproviders\u002F1.index",[218,220,224,228,232,236,240],{"title":219,"path":215,"stem":216},"Infuse-Marketplace Providers",{"title":221,"path":222,"stem":223},"Discover Apps and Algorithms","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fdiscover-products","1.docs\u002F5.marketplace\u002Fproviders\u002F2.discover-products",{"title":225,"path":226,"stem":227},"Create and Manage Listings","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fcreate-listings","1.docs\u002F5.marketplace\u002Fproviders\u002F3.create-listings",{"title":229,"path":230,"stem":231},"Build a Storefront","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fbuild-a-storefront","1.docs\u002F5.marketplace\u002Fproviders\u002F4.build-a-storefront",{"title":233,"path":234,"stem":235},"Checkout Flow","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fcheckout-flow","1.docs\u002F5.marketplace\u002Fproviders\u002F5.checkout-flow",{"title":237,"path":238,"stem":239},"Purchases","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fpurchases","1.docs\u002F5.marketplace\u002Fproviders\u002F6.purchases",{"title":241,"path":242,"stem":243},"Install Purchased Apps and Algorithms","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Finstall-purchased-products","1.docs\u002F5.marketplace\u002Fproviders\u002F7.install-purchased-products","i-lucide-handshake","i-lucide-store",{"title":247,"path":248,"stem":249,"children":250,"icon":253},"Infuse Analytics","\u002Fdocs\u002Finfuse-analytics","1.docs\u002F6.infuse-analytics\u002F1.index",[251],{"title":252,"path":248,"stem":249},"Infuse-Analytics","i-lucide-chart-no-axes-combined",{"title":92,"path":255,"stem":256,"children":257,"icon":278},"\u002Fdocs\u002Fconcepts","1.docs\u002F7.concepts\u002F1.index",[258,259,263,267,270,274],{"title":92,"path":255,"stem":256},{"title":260,"path":261,"stem":262},"Organisations","\u002Fdocs\u002Fconcepts\u002Forganisations","1.docs\u002F7.concepts\u002F2.organisations",{"title":264,"path":265,"stem":266},"Products","\u002Fdocs\u002Fconcepts\u002Fproducts","1.docs\u002F7.concepts\u002F3.products",{"title":104,"path":268,"stem":269},"\u002Fdocs\u002Fconcepts\u002Fdevices","1.docs\u002F7.concepts\u002F5.devices",{"title":271,"path":272,"stem":273},"Entitlements","\u002Fdocs\u002Fconcepts\u002Fentitlements","1.docs\u002F7.concepts\u002F6.entitlements",{"title":275,"path":276,"stem":277},"Infuse-Marketplace Model","\u002Fdocs\u002Fconcepts\u002Fmarketplace-model","1.docs\u002F7.concepts\u002F7.marketplace-model","i-lucide-map",{"title":280,"path":281,"stem":282,"children":283,"icon":314},"IAM & Access","\u002Fdocs\u002Fiam-and-access","1.docs\u002F8.iam-and-access\u002F1.index",[284,286,290,294,298,302,306,310],{"title":285,"path":281,"stem":282},"IAM and Access",{"title":287,"path":288,"stem":289},"Users, Groups, and Roles","\u002Fdocs\u002Fiam-and-access\u002Fusers-groups-and-roles","1.docs\u002F8.iam-and-access\u002F2.users-groups-and-roles",{"title":291,"path":292,"stem":293},"Permissions and Resource Limits","\u002Fdocs\u002Fiam-and-access\u002Fpermissions","1.docs\u002F8.iam-and-access\u002F3.permissions",{"title":295,"path":296,"stem":297},"Service Accounts","\u002Fdocs\u002Fiam-and-access\u002Fservice-accounts","1.docs\u002F8.iam-and-access\u002F4.service-accounts",{"title":299,"path":300,"stem":301},"API Keys","\u002Fdocs\u002Fiam-and-access\u002Fapi-tokens","1.docs\u002F8.iam-and-access\u002F5.api-tokens",{"title":303,"path":304,"stem":305},"Token Exchange","\u002Fdocs\u002Fiam-and-access\u002Ftoken-exchange","1.docs\u002F8.iam-and-access\u002F6.token-exchange",{"title":307,"path":308,"stem":309},"Rotate and Revoke Credentials","\u002Fdocs\u002Fiam-and-access\u002Frotate-and-revoke-credentials","1.docs\u002F8.iam-and-access\u002F7.rotate-and-revoke-credentials",{"title":311,"path":312,"stem":313},"Troubleshooting Auth","\u002Fdocs\u002Fiam-and-access\u002Ftroubleshooting-auth","1.docs\u002F8.iam-and-access\u002F8.troubleshooting-auth","i-lucide-shield-check",{"title":316,"path":317,"stem":318,"children":319,"icon":365},"Guides","\u002Fguides","2.guides\u002F1.index",[320,321,333,344,355],{"title":316,"path":317,"stem":318},{"title":322,"path":323,"stem":324,"children":325,"icon":332},"Access","\u002Fguides\u002Faccess","2.guides\u002Faccess\u002F1.index",[326,328],{"title":327,"path":323,"stem":324},"Access Guides",{"title":329,"path":330,"stem":331},"Create an API Key","\u002Fguides\u002Faccess\u002Fcreate-an-api-token","2.guides\u002Faccess\u002F2.create-an-api-token","i-lucide-key-round",{"title":334,"path":335,"stem":336,"children":337,"icon":143},"Data","\u002Fguides\u002Fdata","2.guides\u002Fdata\u002F1.index",[338,340],{"title":339,"path":335,"stem":336},"Data Guides",{"title":341,"path":342,"stem":343},"Stream IoT Data to Infuse-DB","\u002Fguides\u002Fdata\u002Fstream-iot-data-to-infuse-db","2.guides\u002Fdata\u002F2.stream-iot-data-to-infuse-db",{"title":345,"path":346,"stem":347,"children":348,"icon":119},"IoT","\u002Fguides\u002Fiot","2.guides\u002Fiot\u002F1.index",[349,351],{"title":350,"path":346,"stem":347},"IoT Guides",{"title":352,"path":353,"stem":354},"Connect an IoT Device","\u002Fguides\u002Fiot\u002Fconnect-a-device","2.guides\u002Fiot\u002F2.connect-a-device",{"title":171,"path":356,"stem":357,"children":358,"icon":245},"\u002Fguides\u002Fmarketplace","2.guides\u002Fmarketplace\u002F1.index",[359,361],{"title":360,"path":356,"stem":357},"Infuse-Marketplace Guides",{"title":362,"path":363,"stem":364},"Build an Infuse-Marketplace Storefront","\u002Fguides\u002Fmarketplace\u002Fbuild-a-storefront","2.guides\u002Fmarketplace\u002F2.build-a-storefront","i-lucide-route",{"title":367,"path":368,"stem":369,"children":370,"icon":392},"API Reference","\u002Fapi-reference","3.api-reference\u002F1.index",[371,372,376,380,384,388],{"title":367,"path":368,"stem":369},{"title":373,"path":374,"stem":375},"Admin API","\u002Fapi-reference\u002Fcloud","3.api-reference\u002F2.cloud",{"title":377,"path":378,"stem":379},"Infuse-Marketplace API","\u002Fapi-reference\u002Fmarketplace","3.api-reference\u002F3.marketplace",{"title":381,"path":382,"stem":383},"IAM API","\u002Fapi-reference\u002Fiam","3.api-reference\u002F4.iam",{"title":385,"path":386,"stem":387},"Infuse-IoT Cloud API","\u002Fapi-reference\u002Fiot","3.api-reference\u002F5.iot",{"title":389,"path":390,"stem":391},"Infuse-DB API","\u002Fapi-reference\u002Fdb","3.api-reference\u002F6.db","i-lucide-braces",{"title":394,"path":395,"stem":396,"children":397,"icon":411},"Resources","\u002Fresources","4.resources\u002F1.index",[398,399,403,407],{"title":394,"path":395,"stem":396},{"title":400,"path":401,"stem":402},"SDKs","\u002Fresources\u002Fsdks","4.resources\u002F2.sdks",{"title":404,"path":405,"stem":406},"OpenAPI Specs","\u002Fresources\u002Fopenapi-specs","4.resources\u002F3.openapi-specs",{"title":408,"path":409,"stem":410},"Examples","\u002Fresources\u002Fexamples","4.resources\u002F4.examples","i-lucide-folder-open",{"id":413,"title":165,"body":414,"description":1304,"extension":1305,"links":1306,"meta":1316,"navigation":1317,"path":166,"seo":1318,"stem":167,"__hash__":1319},"docs\u002F1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F2.setup-install.md",{"type":415,"value":416,"toc":1299},"minimark",[417,421,457,462,886,889,892,897,900,940,943,947,1295],[418,419,420],"p",{},"The Infuse-IoT Python Tools can be installed on:",[422,423,424,451,454],"ul",{},[425,426,427,428,435,436],"li",{},"Windows (Natively or using ",[429,430,434],"a",{"href":431,"rel":432},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows\u002Fwsl\u002Fabout",[433],"nofollow","WSL - Windows Subsystem for Linux",").\n",[437,438,439],"tip",{},[418,440,441,442,446,447,450],{},"Instructions for WSL falls under ",[443,444],"icon",{"name":445},"i-simple-icons-linux"," Ubuntu and ",[443,448],{"name":449},"i-simple-icons-gnubash"," bash categories below.",[425,452,453],{},"Ubuntu + other Linux Distros.",[425,455,456],{},"macOS.",[458,459,461],"h2",{"id":460},"prerequisites","Prerequisites",[463,464,466,471,480,503,516,636,640,643,646,657,792,795,808,813,823,828,831],"steps",{"level":465},"3",[467,468,470],"h3",{"id":469},"install-python","Install Python",[418,472,473,474,479],{},"Ensure a suitable version of ",[429,475,478],{"href":476,"rel":477},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[433],"Python"," is installed on your system.\nThe Python Tools are tested with Python versions 3.10 through to 3.14.\nChecking if Python is installed (and which version) can be done by running the following in your terminal.",[481,482,487],"pre",{"className":483,"code":484,"language":485,"meta":486,"style":486},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python --version\n","bash","",[488,489,490],"code",{"__ignoreMap":486},[491,492,495,499],"span",{"class":493,"line":494},"line",1,[491,496,498],{"class":497},"sBMFI","python",[491,500,502],{"class":501},"sfazB"," --version\n",[504,505,508],"callout",{"color":506,"icon":507},"info","i-lucide-info",[418,509,510,511,515],{},"If ZephyrRTOS or Infuse-IoT is setup and working on your machine,\nPython is already installed and setup, skip to ",[429,512,514],{"href":513},"#installation","Installation",".",[517,518,520,543,579],"tabs",{"sync":519},"OS",[521,522,524],"tabs-item",{"label":523,"icon":445},"Ubuntu",[481,525,527],{"className":483,"code":526,"language":485,"meta":486,"style":486},"sudo apt install python3-dev\n",[488,528,529],{"__ignoreMap":486},[491,530,531,534,537,540],{"class":493,"line":494},[491,532,533],{"class":497},"sudo",[491,535,536],{"class":501}," apt",[491,538,539],{"class":501}," install",[491,541,542],{"class":501}," python3-dev\n",[521,544,547,550],{"label":545,"icon":546},"macOS","i-simple-icons:apple",[418,548,549],{},"Avoid using macOS's built-in Python for development,\nas it is managed by the operating system and used by system tools.\nInstalling a separate Python version helps avoids conflicts, and keeps your development environment isolated.",[463,551,552,556,564,568],{"level":465},[467,553,555],{"id":554},"install-homebrew","Install Homebrew",[418,557,558,559,515],{},"If you don't already have Homebrew, you can install it by following Homebrew's\n",[429,560,563],{"href":561,"rel":562},"https:\u002F\u002Fbrew.sh\u002F",[433],"installation instructions",[467,565,567],{"id":566},"install-python-using-homebrew","Install Python using Homebrew",[481,569,573],{"className":570,"code":571,"language":572,"meta":486,"style":486},"language-zsh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","brew install python3\n","zsh",[488,574,575],{"__ignoreMap":486},[491,576,577],{"class":493,"line":494},[491,578,571],{},[521,580,583,586],{"label":581,"icon":582},"Windows","i-simple-icons-windows",[418,584,585],{},"Windows has many ways in which Python can be installed:",[422,587,588,596,629],{},[425,589,590,591],{},"The Microsoft Store's ",[429,592,595],{"href":593,"rel":594},"https:\u002F\u002Fapps.microsoft.com\u002Fdetail\u002F9ncvdn91xzqp",[433],"Python 3.12",[425,597,598,599,604,605,607,608,611,612,617,618],{},"Windows' preinstalled package manager ",[429,600,603],{"href":601,"rel":602},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows\u002Fpackage-manager\u002Fwinget\u002F",[433],"winget","\n(on Windows 11 and recent Windows 10 systems). ",[488,606,603],{}," installation can be verified by running ",[488,609,610],{},"winget --version","\nin the terminal. If it's missing, you can ",[429,613,616],{"href":614,"rel":615},"https:\u002F\u002Faka.ms\u002Fgetwinget",[433],"install"," winget first.\n",[481,619,623],{"className":620,"code":621,"language":622,"meta":486,"style":486},"language-ps shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","winget install Python.Python.3.12\n","ps",[488,624,625],{"__ignoreMap":486},[491,626,627],{"class":493,"line":494},[491,628,621],{},[425,630,631,632],{},"The Python Homepage ",[429,633,635],{"href":476,"rel":634},[433],"Downloads",[467,637,639],{"id":638},"do-you-need-a-virtual-environment","Do you need a Virtual Environment",[418,641,642],{},"Python now requires virtual environments to avoid package conflicts.",[418,644,645],{},"The next steps depends on whether you:",[422,647,648,651,654],{},[425,649,650],{},"Already have your own virtual environment (or one using a different environment manager) for Infuse-IoT Python Tools, or\nintend to use the same virtual environment created as part of an existing ZephyrRTOS or Infuse-IoT SDK installation.",[425,652,653],{},"Don't have one (or know if you have one), but plan to install the Infuse-IoT embedded SDK, or",[425,655,656],{},"Plan to use Infuse-IoT Python tools standalone (without the Infuse-IoT embedded SDK installed).",[517,658,659,672,701],{},[521,660,662,667],{"label":661},"Existing Virtual Environment",[418,663,664,665,515],{},"Skip to ",[429,666,514],{"href":513},[437,668,669],{},[418,670,671],{},"Ensure your intended venv created is active before continuing.",[521,673,675,686,696],{"label":674},"Plan to install Infuse-IoT",[418,676,677,678,683,684,515],{},"The easiest way to setup the venv is to install the Infuse-IoT Embedded SDK.\nFollow the Infuse-IoT\n",[429,679,682],{"href":680,"rel":681},"https:\u002F\u002Fdocs.dev.infuse-iot.com\u002Flatest\u002Fguides\u002Fembedded\u002Findex.html",[433],"Embedded SDK Getting Started Guide","\nto install the embedded SDK, and then continue to ",[429,685,514],{"href":513},[437,687,688],{},[418,689,690,691,695],{},"If you can't install the entire Infuse-IoT embedded SDK right now, you can follow the steps found in\n",[429,692,694],{"href":693},"#setup-a-virtual-environment-venv","Setting up a virutal env"," to setup a virtual environment.\nJust be sure to use the same venv when following the rest of the ZephyRTOS and Infuse-IoT embedded SDK\ninstallations.",[437,697,698],{},[418,699,700],{},"If you don't fully install the Infuse-IoT embedded SDK, keep a note of where you got up to,\nSo you don't forget where you left off when you resume setting up the SDK.",[521,702,704,715,727,733,778],{"label":703},"Standalone",[418,705,706,707,710,711,714],{},"The easiest method to install the Python Tools is to use ",[488,708,709],{},"pipx"," (instead of ",[488,712,713],{},"pip",").",[716,717,718],"warning",{},[418,719,720,721,723,724],{},"If you need to use Infuse-IoT Python Tools with 3rd party tools, do not utilise ",[488,722,709],{},".\nInstead ignore this step and skip to ",[429,725,726],{"href":693},"Setup a Virtual Environment (.venv)",[418,728,729,730,732],{},"Run the following to install ",[488,731,709],{}," depending on your OS.",[517,734,735,761,770],{"sync":519},[521,736,737,753],{"label":523,"icon":445},[481,738,740],{"className":483,"code":739,"language":485,"meta":486,"style":486},"sudo apt install pipx\n",[488,741,742],{"__ignoreMap":486},[491,743,744,746,748,750],{"class":493,"line":494},[491,745,533],{"class":497},[491,747,536],{"class":501},[491,749,539],{"class":501},[491,751,752],{"class":501}," pipx\n",[418,754,755,756],{},"Or follow the instructions in the ",[429,757,760],{"href":758,"rel":759},"https:\u002F\u002Fpipx.pypa.io\u002Flatest\u002Fhow-to\u002Finstall-pipx.html#linux",[433],"pipx documentation",[521,762,763],{"label":545,"icon":546},[418,764,765,766],{},"Follow the instructions in the ",[429,767,760],{"href":768,"rel":769},"https:\u002F\u002Fpipx.pypa.io\u002Flatest\u002Fhow-to\u002Finstall-pipx.html#macos",[433],[521,771,772],{"label":581,"icon":582},[418,773,765,774],{},[429,775,760],{"href":776,"rel":777},"https:\u002F\u002Fpipx.pypa.io\u002Flatest\u002Fhow-to\u002Finstall-pipx.html#windows",[433],[418,779,780,781,783,784,786,787,789,790,515],{},"Once ",[488,782,709],{}," is installed, continue to ",[429,785,514],{"href":513},",\nnoting to substitute ",[488,788,713],{}," with ",[488,791,709],{},[467,793,726],{"id":794},"setup-a-virtual-environment-venv",[418,796,797,798,803,804,807],{},"Zephyr's ",[429,799,802],{"href":800,"rel":801},"https:\u002F\u002Fdocs.zephyrproject.org\u002Flatest\u002Fdevelop\u002Fgetting_started\u002Findex.html#get-zephyr-and-install-python-dependencies",[433],"Getting Started Guide","\noutlines the process to setup a virtual environment in ",[488,805,806],{},"zephyrproject"," (in your user profile\u002Fhome directory).\nFollow the instructions to setup a Virtual Environment.",[437,809,810],{},[418,811,812],{},"The Virtual Environment can be installed to a different location if desired,\nbut the corresponding commands will need to be changed to accomodate the new path.\nSimilarly, other Python Environment managers (e.g. Anaconda) can be used,\nif you're comfortable doing so.",[716,814,815],{},[418,816,817,818],{},"Once created, a virtual environment cannot be moved, so ensure the location is convenient.\nHowever, a venv can be recreated by following the specific steps in the\n",[429,819,822],{"href":820,"rel":821},"https:\u002F\u002Fdocs.dev.infuse-iot.com\u002Flatest\u002Fguides\u002Fembedded\u002Findex.html#useful-tips",[433],"Infuse-IoT Getting Started Guide",[824,825,827],"h4",{"id":826},"dont-forget-to-activate-your-environment","Don't forget to activate your environment",[418,829,830],{},"Remember to activate your virtual environment every time your start a new terminal before working with Infuse-IoT Python Tools,\nor it won't function. With the default installation path, this can be done by running:",[517,832,834,865,876],{"sync":833},"terminal",[521,835,838,852],{"label":836,"icon":837},"Bash\u002FZsh","i-lucide-terminal",[481,839,841],{"className":483,"code":840,"language":485,"meta":486,"style":486},"source ~\u002Fzephyrproject\u002F.venv\u002Fbin\u002Factivate\n",[488,842,843],{"__ignoreMap":486},[491,844,845,849],{"class":493,"line":494},[491,846,848],{"class":847},"s2Zo4","source",[491,850,851],{"class":501}," ~\u002Fzephyrproject\u002F.venv\u002Fbin\u002Factivate\n",[437,853,854],{},[418,855,856,857,860,861,864],{},"If you do not usually use Python or only use this Python Virtual Environments, this line can be added to your\n",[488,858,859],{},".zshrc","\u002F",[488,862,863],{},".bashrc"," to automatically launch the virtual environment when opening a shell to avoid needing to\ntype it each time. Otherwise using an alias can make it easier to switch between different venv's.",[521,866,868],{"label":867,"icon":837},"Windows (CMD)",[481,869,874],{"className":870,"code":872,"language":873},[871],"language-text","zephyrproject\\.venv\\Scripts\\Activate.bat\n","text",[488,875,872],{"__ignoreMap":486},[521,877,880],{"label":878,"icon":879},"Windows (Powershell)","i-vscode-icons-file-type-powershell",[481,881,884],{"className":882,"code":883,"language":873},[871],"zephyrproject\\.venv\\Scripts\\Activate.ps1\n",[488,885,883],{"__ignoreMap":486},[458,887,514],{"id":888},"installation",[418,890,891],{},"The Python tools can be installed from PyPI.",[716,893,894],{},[418,895,896],{},"Select the option depending on whether you are using a virtual environment (pip) or not (pipx)",[418,898,899],{},"Utilise the following command to install Infuse-IoT Python Tools.",[517,901,902,924],{},[521,903,905,919],{"label":904},"Using a venv (pip)",[481,906,908],{"className":483,"code":907,"language":485,"meta":486,"style":486},"pip install infuse-iot\n",[488,909,910],{"__ignoreMap":486},[491,911,912,914,916],{"class":493,"line":494},[491,913,713],{"class":497},[491,915,539],{"class":501},[491,917,918],{"class":501}," infuse-iot\n",[437,920,921],{},[418,922,923],{},"Ensure your venv is activated before installing.",[521,925,927],{"label":926},"Not using a virtual environment (pipx)",[481,928,930],{"className":483,"code":929,"language":485,"meta":486,"style":486},"pipx install infuse-iot\n",[488,931,932],{"__ignoreMap":486},[491,933,934,936,938],{"class":493,"line":494},[491,935,709],{"class":497},[491,937,539],{"class":501},[491,939,918],{"class":501},[418,941,942],{},"Once installed, some additional setup required.",[458,944,946],{"id":945},"additional-setup","Additional Setup",[463,948,949,953,961,964,970,973,979,982,1040,1044,1047,1056,1061,1072,1078,1101,1108,1113,1117,1120,1202,1206,1213,1231,1235,1238,1241,1258,1267,1270,1287],{"level":465},[467,950,952],{"id":951},"keyring","Keyring",[418,954,955,956,960],{},"Infuse-IoT Python Tools utilises ",[429,957,952],{"href":958,"rel":959},"https:\u002F\u002Fpypi.org\u002Fproject\u002Fkeyring\u002F",[433]," to securely store secrets such as API\nkeys and caching Network Credentials and installs it as part of Infuse-IoT's installation.\nKeyring is cross platform by utilising different backends on different OS's.",[418,962,963],{},"Check that Keyring is correctly setup by running:",[481,965,968],{"className":966,"code":967,"language":873},[871],"keyring --list-backends\n",[488,969,967],{"__ignoreMap":486},[418,971,972],{},"This will output the supported backends on your machine such as:",[481,974,977],{"className":975,"code":976,"language":873},[871],"> keyring --list-backends\nkeyring.backends.chainer.ChainerBackend (priority: -1)\nkeyring.backends.fail.Keyring (priority: 0)\nkeyring.backends.SecretService.Keyring (priority: 5)\n",[488,978,976],{"__ignoreMap":486},[418,980,981],{},"Search for a backend with a priority above 0.",[517,983,984,1020,1030],{"sync":519},[521,985,987,996,1001,1004],{"label":523,"icon":445,"sync":986},"ubuntu",[418,988,989,990,995],{},"Ubuntu and other distros won't always have a default credential provider.\nThe preferred predential storage provider is provided by\n",[429,991,994],{"href":992,"rel":993},"https:\u002F\u002Fgitlab.gnome.org\u002FGNOME\u002Fgnome-keyring",[433],"gnome-keyring"," and appears as:",[418,997,998,515],{},[488,999,1000],{},"keyring.backends.SecretService.Keyring",[418,1002,1003],{},"It can be installed with:",[481,1005,1007],{"className":483,"code":1006,"language":485,"meta":486,"style":486},"sudo apt install gnome-keyring\n",[488,1008,1009],{"__ignoreMap":486},[491,1010,1011,1013,1015,1017],{"class":493,"line":494},[491,1012,533],{"class":497},[491,1014,536],{"class":501},[491,1016,539],{"class":501},[491,1018,1019],{"class":501}," gnome-keyring\n",[521,1021,1022,1025],{"label":545,"icon":546},[418,1023,1024],{},"Apple's Keychain is the preferred credential storage provider and is preinstalled.\nIt appears as:",[418,1026,1027,515],{},[488,1028,1029],{},"keyring.backends.macOS.Keyring",[521,1031,1032,1035],{"label":581,"icon":582},[418,1033,1034],{},"Windows Credential Locker is the preferred credential storage provider and is preinstalled.\nIt appears as:",[418,1036,1037,515],{},[488,1038,1039],{},"keyring.backends.Windows.WinVaultKeyring",[467,1041,1043],{"id":1042},"setup-infuse-iot-credentials","Setup Infuse-IoT Credentials",[418,1045,1046],{},"The Python tools interract with the Infuse-IoT cloud API to setup boards and run cloud RPCs.\nTo perform these tasks, the Python tools require a Cloud API key to authorise the commands.",[418,1048,1049,1050,1055],{},"At this point in time the Infuse-IoT Cloud API only accepts legacy Organisation Admin API Keys\n(opposed to other Temporary and IAM Managed API Keys that are also available in the Infuse-IoT Portal).\nThe Legacy Organisation Admin API key can be retrieved by Organisation Admins from the Infuse-IoT\nPortal Under the ",[429,1051,1054],{"href":1052,"rel":1053},"https:\u002F\u002Fportal.infuse-cloud.io\u002Fadmin\u002Fdeveloper",[433],"Admin Centre > Developer","\nat the very bottom under the \"Infuse Iot Admin Api Key\" section.\nClick the \"Fetch Key\" button and copy the API Key.",[716,1057,1058],{},[418,1059,1060],{},"Ensure you have access to your Organisation's Admin Key. Otherwise contact your Organisation's Administrator.",[418,1062,1063,1064,1067,1068,1071],{},"Run the command below (replacing ",[488,1065,1066],{},"[API_KEY]"," with your API key, while ommitting the ",[488,1069,1070],{},"Bearer "," prefix)\nto save your API key on the machine.",[481,1073,1076],{"className":1074,"code":1075,"language":873},[871],"infuse credentials --api-key [API_KEY]\n",[488,1077,1075],{"__ignoreMap":486},[716,1079,1080,1083,1089,1095],{},[418,1081,1082],{},"Some systems running WSL may have issues with keyring raising:",[481,1084,1087],{"className":1085,"code":1086,"language":873},[871],"secretstorage.exceptions.PromptDismissedException: Prompt dismissed\n",[488,1088,1086],{"__ignoreMap":486},[418,1090,1091,1092,1094],{},"This is likely because WSL launches the distro headless.\nRunning the following command once should fix it (that or add to ",[488,1093,863],{}," if it reappears after rebooting WSL)",[481,1096,1099],{"className":1097,"code":1098,"language":873},[871],"dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY\n",[488,1100,1098],{"__ignoreMap":486},[418,1102,1103,1104,1107],{},"When launching ",[488,1105,1106],{},"infuse"," it will attempt to unlock the keyring to access its credentials,\nand you will receive a password prompt.",[437,1109,1110],{},[418,1111,1112],{},"For WSL users, this prompt will only ask for a password. This password will correspond to the user account\ncreated inside WSL (not the account used to sign into Windows).",[467,1114,1116],{"id":1115},"register-autocomplete-optional","Register Autocomplete (Optional)",[418,1118,1119],{},"Enable Tab auto completion for the Python Tools.",[517,1121,1122,1161,1196],{"sync":833},[521,1123,1125,1130,1153],{"label":1124,"icon":449},"Bash",[418,1126,1127,1128],{},"Add the following to your ",[488,1129,863],{},[481,1131,1133],{"className":483,"code":1132,"language":485,"meta":486,"style":486},"eval \"$(register-python-argcomplete infuse)\"\n",[488,1134,1135],{"__ignoreMap":486},[491,1136,1137,1140,1144,1147,1150],{"class":493,"line":494},[491,1138,1139],{"class":847},"eval",[491,1141,1143],{"class":1142},"sMK4o"," \"$(",[491,1145,1146],{"class":497},"register-python-argcomplete",[491,1148,1149],{"class":501}," infuse",[491,1151,1152],{"class":1142},")\"\n",[437,1154,1155],{},[418,1156,1157,1158,1160],{},"If you auto-load your Virtual Environment in your ",[488,1159,863],{},",\nensure to add this line afterwards.",[521,1162,1164,1168,1189],{"label":572,"icon":1163},"i-simple-icons-zsh",[418,1165,1127,1166,515],{},[488,1167,859],{},[481,1169,1171],{"className":570,"code":1170,"language":572,"meta":486,"style":486},"autoload -Uz compinit\ncompinit\neval \"$(register-python-argcomplete infuse)\"\n",[488,1172,1173,1178,1184],{"__ignoreMap":486},[491,1174,1175],{"class":493,"line":494},[491,1176,1177],{},"autoload -Uz compinit\n",[491,1179,1181],{"class":493,"line":1180},2,[491,1182,1183],{},"compinit\n",[491,1185,1187],{"class":493,"line":1186},3,[491,1188,1132],{},[437,1190,1191],{},[418,1192,1157,1193,1195],{},[488,1194,859],{},",\nensure to add this line afterwards",[521,1197,1199],{"label":1198,"icon":837},"CMD\u002FPowerShell",[418,1200,1201],{},"Tab Autocomplete is not supported on Windows terminals.",[467,1203,1205],{"id":1204},"cache-network-credentials-optional","Cache Network Credentials (Optional)",[418,1207,1208,1209,1212],{},"During development, Infuse-IoT SDK powered devices utilise a default, publicly available network key for encryption.\nA custom, non-public network key may be used during development and should be used for releases.\nFor the Python tools to communicate with these devices, the encryption key must be registered with the Python Tools.\nThese custom keys are generated by the embedded SDK as a ",[488,1210,1211],{},".yaml","file and can be shared and imported into the Python\ntools with:",[481,1214,1216],{"className":483,"code":1215,"language":485,"meta":486,"style":486},"infuse credentials --network network_key_file.yaml\n",[488,1217,1218],{"__ignoreMap":486},[491,1219,1220,1222,1225,1228],{"class":493,"line":494},[491,1221,1106],{"class":497},[491,1223,1224],{"class":501}," credentials",[491,1226,1227],{"class":501}," --network",[491,1229,1230],{"class":501}," network_key_file.yaml\n",[467,1232,1234],{"id":1233},"load-project-specific-definitions-scripts-optional","Load Project Specific Definitions & Scripts (Optional)",[418,1236,1237],{},"If you're using a custom project that includes custom definitions (for RPCs, TDFs, KV, etc), you can import those\ninto the Python tools.",[418,1239,1240],{},"Import custom tools:",[481,1242,1244],{"className":483,"code":1243,"language":485,"meta":486,"style":486},"python credentials --custom-tools \u002Fpath\u002Fto\u002Ftools_folder\n",[488,1245,1246],{"__ignoreMap":486},[491,1247,1248,1250,1252,1255],{"class":493,"line":494},[491,1249,498],{"class":497},[491,1251,1224],{"class":501},[491,1253,1254],{"class":501}," --custom-tools",[491,1256,1257],{"class":501}," \u002Fpath\u002Fto\u002Ftools_folder\n",[437,1259,1260],{},[418,1261,1262,1263,1266],{},"If your embedded SDK project contains custom tools, they will typically be found under the project's\n",[488,1264,1265],{},"scripts\u002Ftools"," folder",[418,1268,1269],{},"Import custom definitions:",[481,1271,1273],{"className":483,"code":1272,"language":485,"meta":486,"style":486},"python credentials --custom-definitions \u002Fpath\u002Fto\u002Fdefinitions_folder\n",[488,1274,1275],{"__ignoreMap":486},[491,1276,1277,1279,1281,1284],{"class":493,"line":494},[491,1278,498],{"class":497},[491,1280,1224],{"class":501},[491,1282,1283],{"class":501}," --custom-definitions",[491,1285,1286],{"class":501}," \u002Fpath\u002Fto\u002Fdefinitions_folder\n",[437,1288,1289],{},[418,1290,1291,1292,1266],{},"If your embedded SDK project contains custom tools, they will typically be found under the project's ",[488,1293,1294],{},"generated",[1296,1297,1298],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":486,"searchDepth":494,"depth":1180,"links":1300},[1301,1302,1303],{"id":460,"depth":1180,"text":461},{"id":888,"depth":1180,"text":514},{"id":945,"depth":1180,"text":946},"Instructions to install and setup the Infuse-IoT Python tools.","md",[1307,1312],{"label":1308,"icon":1309,"to":1310,"target":1311},"Open in PyPI","i-lucide-external-link","https:\u002F\u002Fpypi.org\u002Fproject\u002Finfuse-iot\u002F","_blank",{"label":1313,"icon":1314,"to":1315,"target":1311},"Source repository","i-simple-icons-github","https:\u002F\u002Fgithub.com\u002FEmbeint\u002Fpython-tools",{},true,{"title":165,"description":1304},"8jIkVlddf45S4b92iqkV_8n4iieGmDZXoOH6TLZOONA",[1321,1323],{"title":161,"path":162,"stem":163,"description":1322,"children":-1},"Companion Python tooling to configure and interact with firmware built with Infuse-IoT SDK.",{"title":176,"path":172,"stem":173,"description":1324,"children":-1},"Resell embedded apps and algorithms for compatible Infuse-IoT SDK devices.",1788481329278]