Metadata-Version: 2.1
Name: curl2req
Version: 0.1.1
Summary: bash curl transfer to requests
Home-page: https://github.com/azhao1981/curl2req
Author: weiz
Author-email: weiz <azhao.1981@gmail.com>
License: MIT License
        
        Copyright (c) 2025 韦昭
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
Project-URL: Homepage, https://github.com/azhao1981/curl2req
Project-URL: Bug Tracker, https://github.com/azhao1981/curl2req/issues
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests
Requires-Dist: pydantic
Requires-Dist: curlparser
Requires-Dist: jsonpath_ng
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: flake8; extra == "dev"
Requires-Dist: sphinx; extra == "dev"

# curl2req

bash curl transfer to requests 

**1. 项目初始化和结构**

```
curl2req/
├── curl2req/       # 实际的 Python 包目录
│   ├── __init__.py  # 标记为 Python 包
│   ├── module1.py
│   ├── module2.py
│   └── subpackage/
│       ├── __init__.py
│       └── submodule.py
├── tests/          # 存放测试代码
│   ├── __init__.py
│   ├── test_module1.py
│   └── test_module2.py
├── examples/       # 可选：存放使用示例
│   └── example1.py
├── docs/           # 可选：存放文档
│   ├── conf.py
│   ├── index.rst
│   └── ...
├── .gitignore      # Git 忽略文件
├── LICENSE         # 许可证文件
├── README.md       # 项目说明文件
├── pyproject.toml  # (推荐) 项目构建配置
└── setup.py        # (可选，但通常需要) 项目构建配置
```

* **`__init__.py`:**  在你的包目录 (`curl2req/curl2req/`) 中创建一个空的 `__init__.py` 文件，将其标记为一个 Python 包。你也可以在 `__init__.py` 中导入子模块或定义包级别的变量和函数。
* **模块化代码:** 将你的代码组织成逻辑清晰的模块和子包。

**2. 配置项目构建 (`pyproject.toml` 和 `setup.py`)**

推荐使用 `pyproject.toml` 作为主要的构建配置，它更现代化且标准化。`setup.py` 仍然被广泛使用，并且在某些情况下是必要的。

* **`pyproject.toml` (推荐):**

   ```toml
   [build-system]
   requires = ["setuptools>=61.0", "wheel"]
   build-backend = "setuptools.build_meta"

   [project]
   name = "curl2req"
   version = "0.1.0"
   description = "A short description of my package"
   readme = "README.md"
   authors = [{ name = "Your Name", email = "your.email@example.com" }]
   license = { file = "LICENSE" }
   classifiers = [
       "Programming Language :: Python :: 3",
       "License :: OSI Approved :: MIT License",
       "Operating System :: OS Independent",
   ]
   dependencies = [
       "requests",
       "numpy>=1.20.0",
   ]

   [project.optional-dependencies]
   dev = [
       "pytest",
       "flake8",
       "sphinx",
   ]

   [project.urls]
   "Homepage" = "https://github.com/yourusername/curl2req"
   "Bug Tracker" = "https://github.com/yourusername/curl2req/issues"
   ```

   * **`[build-system]`:**  指定构建后端和所需的工具。
   * **`[project]`:**  包含包的基本元数据，如名称、版本、描述、作者、许可证、分类器和依赖项。
     * **`name`:**  你的包在 PyPI 上的名称。
     * **`version`:**  包的版本号 (遵循语义化版本控制)。
     * **`description`:**  简短的包描述。
     * **`readme`:**  指向 README 文件的路径。
     * **`authors` / `maintainers`:**  包的作者和维护者信息。
     * **`license`:**  包的许可证信息。
     * **`classifiers`:**  用于在 PyPI 上分类你的包。
     * **`dependencies`:**  你的包运行时所需的依赖项。
     * **`optional-dependencies`:**  可选的依赖项，例如用于开发或测试的工具。
     * **`urls`:**  指向项目网站、Issue Tracker 等的链接。

* **`setup.py` (可选，但常见):**

   ```python
   from setuptools import setup, find_packages

   with open("README.md", "r", encoding="utf-8") as fh:
       long_description = fh.read()

   setup(
       name='curl2req',
       version='0.1.0',
       author='Your Name',
       author_email='your.email@example.com',
       description='A short description of my package',
       long_description=long_description,
       long_description_content_type="text/markdown",
       url='https://github.com/yourusername/curl2req',
       packages=find_packages(),
       classifiers=[
           "Programming Language :: Python :: 3",
           "License :: OSI Approved :: MIT License",
           "Operating System :: OS Independent",
       ],
       python_requires='>=3.6',
       install_requires=[
           'requests',
           'numpy>=1.20.0',
       ],
       extras_require={
           'dev': [
               'pytest',
               'flake8',
               'sphinx',
           ]
       },
   )
   ```

   * **`name`:**  你的包在 PyPI 上的名称。
   * **`version`:**  包的版本号。
   * **`author` / `author_email`:**  包的作者信息。
   * **`description`:**  简短的包描述。
   * **`long_description`:**  更详细的包描述，通常来自 README 文件。
   * **`long_description_content_type`:**  长描述的格式 (例如 "text/markdown")。
   * **`url`:**  项目的主页 URL。
   * **`packages=find_packages()`:**  自动查找项目中的所有包。
   * **`classifiers`:**  用于在 PyPI 上分类你的包。
   * **`python_requires`:**  指定你的包兼容的 Python 版本。
   * **`install_requires`:**  你的包运行时所需的依赖项。
   * **`extras_require`:**  可选的依赖项，例如用于开发或测试的工具。

**3. 编写代码和文档**

* **编写清晰、可维护的代码:**  遵循 PEP 8 风格指南，编写易于理解和维护的代码。
* **添加类型提示 (Type Hints):**  使用类型提示可以提高代码的可读性和可维护性，并帮助静态类型检查工具发现潜在的错误。
* **编写全面的文档:**  清晰的文档对于用户理解和使用你的包至关重要。
    * **README 文件 (`README.md` 或 `README.rst`):**  提供包的概述、安装说明、基本用法示例和贡献指南。
    * **详细的 API 文档:**  使用工具如 Sphinx 和 docstrings 来生成详细的 API 文档。
    * **示例代码:**  在 `examples/` 目录下提供清晰的示例代码，展示如何使用你的包。

**4. 编写测试**

* **编写单元测试:**  使用 `pytest` 或 `unittest` 等测试框架编写单元测试，确保你的代码功能正常。
* **测试覆盖率:**  努力提高测试覆盖率，确保你的代码大部分都被测试覆盖到。
* **自动化测试:**  配置持续集成 (CI) 服务 (如 GitHub Actions, GitLab CI, Travis CI) 来自动运行测试。

**5. 选择许可证**

* **选择合适的开源许可证:**  常见的开源许可证包括 MIT, Apache 2.0, GPL 等。选择一个符合你需求的许可证，并在项目根目录下创建一个 `LICENSE` 文件，包含完整的许可证文本。

**6. 版本控制**

* **使用 Git 进行版本控制:**  将你的项目放在 Git 仓库中，方便版本管理和协作。
* **遵循语义化版本控制 (Semantic Versioning):**  使用语义化版本控制 (例如 `major.minor.patch`) 来清晰地表示你的包的版本更新。

**7. 构建和发布**

* **安装构建工具:** 确保你安装了 `setuptools` 和 `wheel`：
   ```bash
   pip install --upgrade setuptools wheel
   ```

* **构建发行版:** 使用 `build` 工具 (推荐) 或 `setup.py` 来构建源代码发行版和 wheel 文件：

   ```bash
   # 使用 build (推荐)
   pip install build
   python -m build

   # 或者使用 setup.py
   python setup.py sdist bdist_wheel
   ```

   这将在 `dist/` 目录下生成 `.tar.gz` (源代码发行版) 和 `.whl` (wheel 文件)。

* **安装 Twine:**  `twine` 是一个用于安全地将包上传到 PyPI 的工具：
   ```bash
   pip install twine
   ```

* **上传到 TestPyPI (推荐先测试):**  先将你的包上传到 TestPyPI 进行测试：
   ```bash
   twine upload --repository testpypi dist/*
   ```
   你需要一个 TestPyPI 的账号。

* **上传到 PyPI:**  如果 TestPyPI 测试成功，将你的包上传到正式的 PyPI：
   ```bash
   twine upload dist/*
   ```
   你需要一个 PyPI 的账号。

**8. 持续维护和更新**

* **响应 Issue 和 Pull Request:**  及时处理用户提出的问题和贡献。
* **定期更新依赖项:**  保持你的包依赖项的更新，以修复安全漏洞和利用新功能。
* **发布新版本:**  根据需要发布新版本，修复 bug、添加新功能或改进性能。

**最佳实践总结:**

* **使用 `pyproject.toml` 进行构建配置 (推荐)。**
* **清晰的目录结构和模块化代码。**
* **编写全面的文档 (README, API 文档, 示例)。**
* **编写单元测试并追求高测试覆盖率。**
* **选择合适的开源许可证。**
* **使用 Git 进行版本控制并遵循语义化版本控制。**
* **使用 `build` 和 `twine` 进行构建和发布。**
* **先在 TestPyPI 上测试你的包。**
* **持续维护和更新你的包。**
* **使用虚拟环境进行开发，避免全局环境污染。**
* **使用代码风格检查工具 (如 `flake8`, `pylint`) 和格式化工具 (如 `black`) 来保持代码一致性。**
* **考虑使用持续集成 (CI) 服务来自动化测试、构建和发布流程。**

遵循这些最佳实践可以帮助你创建一个高质量、易于使用和维护的 Python 包。
