ITPub博客

首页 > 应用开发 > IT综合 > Ubuntu系统中Python开发环境配置与项目实践指南

Ubuntu系统中Python开发环境配置与项目实践指南

投稿 IT综合 作者:bhluo 时间:2026-01-23 11:17:40 0 删除 编辑

Ubuntu系统中Python开发环境配置与项目实践指南


在Ubuntu系统上搭建Python开发环境具备天然优势,系统预装Python解释器和丰富的开发工具。本文将详细介绍从基础配置到项目实践的完整流程。


## Python环境基础配置


Ubuntu系统通常预装Python3。首先确认当前Python版本并设置合适的默认版本:


```bash

# 检查已安装的Python版本

python3 --version

python --version


# 安装Python3虚拟环境支持

sudo apt update

sudo apt install python3-venv python3-pip


# 设置python3为默认python命令(可选)

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1

```


## 虚拟环境创建与管理


为每个项目创建独立的虚拟环境是Python开发的最佳实践。这样可以避免包依赖冲突:


```bash

# 为项目创建虚拟环境

python3 -m venv ~/venv/myproject


# 激活虚拟环境

source ~/venv/myproject/bin/activate


# 验证虚拟环境已激活

which python

which pip


# 退出虚拟环境

deactivate

```


为了方便管理,可以创建自动化脚本。新建`~/bin/create_python_project.sh`:


```bash

#!/bin/bash

if [ -z "$1" ]; then

    echo "请指定项目名称"

    exit 1

fi


PROJECT_NAME=$1

PROJECT_DIR="$HOME/projects/$PROJECT_NAME"

VENV_DIR="$HOME/venv/$PROJECT_NAME"


mkdir -p $PROJECT_DIR

python3 -m venv $VENV_DIR


# 创建基本项目结构

cd $PROJECT_DIR

mkdir src tests docs data


# 创建基础文件

cat > requirements.txt << EOF

# 项目依赖

pytest>=7.0.0

black>=22.0.0

EOF


cat > .gitignore << EOF

__pycache__/

*.pyc

venv/

.env

*.log

EOF


echo "项目 $PROJECT_NAME 已创建在 $PROJECT_DIR"

echo "激活虚拟环境: source $VENV_DIR/bin/activate"

```


## 包管理与依赖控制


在虚拟环境中使用pip安装和管理包依赖:


```bash

# 激活虚拟环境后操作

source ~/venv/myproject/bin/activate


# 安装单个包

pip install requests


# 安装特定版本

pip install django==4.0.0


# 从requirements.txt安装所有依赖

pip install -r requirements.txt


# 生成当前环境依赖列表

pip freeze > requirements.txt


# 安装开发依赖

pip install pytest black flake8

```


对于复杂项目,可以使用requirements分层管理。创建`requirements/`目录:


```bash

mkdir -p requirements

# 基础依赖

cat > requirements/base.txt << EOF

numpy>=1.20.0

pandas>=1.3.0

sqlalchemy>=1.4.0

EOF


# 开发依赖

cat > requirements/dev.txt << EOF

-r base.txt

pytest>=7.0.0

black>=22.0.0

flake8>=4.0.0

pytest-cov>=3.0.0

EOF


# 生产依赖

cat > requirements/prod.txt << EOF

-r base.txt

gunicorn>=20.1.0

EOF

```


## 开发工具配置与使用


配置代码格式化工具black和代码检查工具flake8:


```bash

# 安装工具

pip install black flake8


# 创建配置文件 pyproject.toml

cat > pyproject.toml << EOF

[tool.black]

line-length = 88

target-version = ['py310']


[tool.flake8]

max-line-length = 88

extend-ignore = E203

EOF


# 格式化代码

black src/


# 检查代码规范

flake8 src/

```


配置VSCode的Python开发环境。创建`.vscode/settings.json`:


```json

{

    "python.defaultInterpreterPath": "${HOME}/venv/myproject/bin/python",

    "python.linting.enabled": true,

    "python.linting.flake8Enabled": true,

    "python.formatting.provider": "black",

    "python.testing.pytestEnabled": true,

    "editor.formatOnSave": true,

    "editor.codeActionsOnSave": {

        "source.organizeImports": true

    }

}

```


## 项目结构与模块组织


良好的项目结构有助于代码维护。参考以下结构组织中型项目:


```python

# 项目结构示例

myproject/

├── src/

│   ├── myproject/

│   │   ├── __init__.py

│   │   ├── core.py

│   │   ├── utils/

│   │   │   ├── __init__.py

│   │   │   ├── helpers.py

│   │   │   └── validators.py

│   │   └── models/

│   │       ├── __init__.py

│   │       └── database.py

│   └── scripts/

│       └── setup_db.py

├── tests/

│   ├── __init__.py

│   ├── test_core.py

│   └── test_utils/

│       └── test_helpers.py

├── docs/

│   └── api.md

├── data/

│   └── sample.csv

├── requirements.txt

├── pyproject.toml

├── .gitignore

└── README.md

```


创建合适的`__init__.py`文件定义包结构。在`src/myproject/__init__.py`中:


```python

"""

MyProject - 项目简要描述


主要功能模块说明

"""


__version__ = "0.1.0"

__author__ = "Your Name"


from .core import main_function

from .utils.helpers import process_data

<"os.jsnjz.cn"><"wae.csxthr.com"><"btk.zhaiLimao.com">


__all__ = ["main_function", "process_data"]

```


## 数据库连接实践


在Ubuntu上连接常见数据库的配置方法。以PostgreSQL为例:


```bash

# 安装PostgreSQL和开发包

sudo apt install postgresql libpq-dev


# 安装Python数据库驱动

pip install psycopg2-binary

# 或使用异步版本

pip install asyncpg

```


创建数据库连接工具模块`src/myproject/db/connection.py`:


```python

import os

from typing import Optional

from sqlalchemy import create_engine

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import sessionmaker


Base = declarative_base()


def get_database_url() -> str:

    """从环境变量获取数据库连接字符串"""

    db_host = os.getenv("DB_HOST", "localhost")

    db_port = os.getenv("DB_PORT", "5432")

    db_name = os.getenv("DB_NAME", "myproject")

    db_user = os.getenv("DB_USER", "myuser")

    db_password = os.getenv("DB_PASSWORD", "")

    

    return f"postgresql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}"


class DatabaseManager:

    """数据库管理器"""

    

    def __init__(self, database_url: Optional[str] = None):

        self.database_url = database_url or get_database_url()

        self.engine = None

        self.SessionLocal = None

        

    def connect(self):

        """建立数据库连接"""

        self.engine = create_engine(

            self.database_url,

            pool_size=10,

            max_overflow=20,

            pool_pre_ping=True

        )

        self.SessionLocal = sessionmaker(

            autocommit=False,

            autoflush=False,

            bind=self.engine

        )

        

    def get_session(self):

        """获取数据库会话"""

        if self.SessionLocal is None:

            self.connect()

        return self.SessionLocal()

    

    def create_tables(self):

        """创建所有数据表"""

        if self.engine is None:

            self.connect()

        Base.metadata.create_all(bind=self.engine)

<"chanel.jsnjz.cn"><"helena.csxthr.com"><"baj.zhaiLimao.com">

```


## 测试与调试技巧


使用pytest进行单元测试。创建测试文件`tests/test_core.py`:


```python

import pytest

from src.myproject.core import calculate_statistics


class TestCalculateStatistics:

    """测试统计计算函数"""

    

    def test_empty_list(self):

        """测试空列表"""

        result = calculate_statistics([])

        assert result == {"mean": 0, "count": 0}

    

    def test_normal_case(self):

        """测试正常情况"""

        data = [1, 2, 3, 4, 5]

        result = calculate_statistics(data)

        assert result["mean"] == 3.0

        assert result["count"] == 5

    

    @pytest.mark.parametrize("input_data,expected_mean", [

        ([10, 20], 15),

        ([1, 1, 1, 1], 1),

        ([100], 100)

    ])

    def test_various_inputs(self, input_data, expected_mean):

        """参数化测试多种输入"""

        result = calculate_statistics(input_data)

        assert result["mean"] == expected_mean

```


使用调试器定位问题。创建调试脚本`debug_example.py`:


```python

import pdb


def process_numbers(numbers):

    """处理数字列表的示例函数"""

    result = []

    for num in numbers:

        # 设置断点

        pdb.set_trace()

        if num > 0:

            processed = num * 2

        else:

            processed = num * -1

        result.append(processed)

    return result


if __name__ == "__main__":

    data = [1, -2, 3, -4, 5]

    output = process_numbers(data)

    print(f"处理结果: {output}")

```


运行调试:

```bash

python debug_example.py

# 进入pdb调试环境后可使用命令:

# n - 下一行

# c - 继续执行

# p variable - 打印变量值

# q - 退出调试

```


在Ubuntu上开展Python开发工作,合理利用系统特性和工具链能够显著提升开发效率。从环境隔离到依赖管理,从代码规范到测试调试,每个环节都有成熟的工具和实践模式。随着项目的复杂度增加,这些基础配置和最佳实践的价值会愈发明显。掌握Ubuntu下的Python开发全流程,不仅能够创建可靠的应用,也为后续的性能优化和部署运维奠定坚实基础。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19545/viewspace-3108755/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-11-01

  • 博文量
    895
  • 访问量
    934028