> For the complete documentation index, see [llms.txt](https://x1ecochain.gitbook.io/x1-ecochain-tech-whitepaper/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://x1ecochain.gitbook.io/x1-ecochain-tech-whitepaper/development-environment/python-sdk.md).

# Python SDK

### Overview

If you want to use Python to connect with a blockchain node, it's possible to use vanilla Python but several convenience libraries exist within the ecosystem that make this much easier. With these libraries, developers can write intuitive, one-line methods to initialize JSON-RPC requests (under the hood) that interact with blockchain.

**Python SDKs** provide powerful and easy-to-use interfaces for interacting with EVM (Ethereum Virtual Machine) compatible blockchains like Ethereum, Polygon, BSC, Avalanche, and others.

### Main Libraries:

#### 1. [**Web3.py**](http://Web3.py) (Recommended)

* Official Python library for Ethereum
* Comprehensive API with extensive documentation
* Built-in support for smart contracts and transactions
* Active community and regular updates

#### 2. **Brownie**

* Development framework built on [Web3.py](http://Web3.py)
* Integrated testing and deployment tools
* Smart contract compilation and management
* Great for DeFi and complex dApp development

#### 3. **Ape Framework**

* Modern Python framework for Ethereum development
* Plugin-based architecture
* Advanced testing capabilities
* Type hints and modern Python features

### Quick Example

Here's a simple example using [**Web3.py**](http://Web3.py) to check an account balance:

```
from web3 import Web3

# Connect to network (X1EcoChain Nubica Testnet)
w3 = Web3(Web3.HTTPProvider('https://nubica-rpc.x1eco.com'))

# Check connection
if w3.is_connected():
    print("Connected to X1EcoChain network")

    # Check X1 balance
    address = '<some address>'
    balance_wei = w3.eth.get_balance(address)

    # Convert from wei to X1
    balance_eth = w3.from_wei(balance_wei, 'ether')
    print(f"Balance: {balance_eth} X1")
else:
    print("Failed to connect")
```

***

### Next Steps:

* Set up wallet connections and private key management
* Interact with smart contracts
* Handle transactions and events
* Implement error handling and gas optimization
* Use async/await for better performance
