目录结构

(ops) [root@zaza-test ~]# tree opsutil/
opsutil
├── README.rst
├── setup.py
├── src
│   ├── ftp.py
│   ├── __init__.py  # 可以添加类似内容:from .ftp import Ftp,实现from opsutil import Ftp导入类
│   ├── ip.py
│   ├── log.py
│   ├── rsync.py
│   ├── server.py
└── tests
    ├── __init__.py
    ├── results
    │   └── __init__.py
    └── units
        ├── __init__.py
        └── test_server.py

#setup.py文件如下
from setuptools import setup, find_packages
setup(
    name="opsutil",         # 影响这个包名称site-packages/opsutil-0.0.1-py2.7.egg
    version="0.0.1",        # 影响这个包版本site-packages/opsutil-0.0.1-py2.7.egg
    author="zaza",
    author_email="260458726@qq.com",
    url="https://github.com/zazayaya",
    license="GPL",
    description="ops util",
    package_dir={'opsutil': 'src'}, # opsutil-0.0.1-py2.7.egg/opsutil,影响末尾导入模块名称,import这个名称,可以根据需求修改名称
    packages=['opsutil'],           # opsutil-0.0.1-py2.7.egg/opsutil,影响末尾导入模块名称,import这个名称,可以根据需求修改名称
    #packages=find_packages(),
    classifiers=[
                "Programming Language :: Python",
                "Programming Language :: Python :: 2.7",
            ],
    include_package_data = True,
    zip_safe=False
)

单元测试

# 或者setup.py标准测试
pip install pytest-runner
# https://docs.pytest.org/en/latest/goodpractices.html#test-discovery
# setup.py
setup(
   # ...,
   setup_requires=["pytest-runner", ...],
   tests_require=["pytest", ...],
   # ...,
)
# setup.cfg
[aliases]
test=pytest
# 执行测试
python setup.py test

初始化目录

https://pythonguidecn.readthedocs.io/zh/latest/writing/structure.html#id2

# 项目顶层目录
mkdir opsutil
# 代码目录
# mkdir -pv opsutil/src/opsutil
mkdir -pv opsutil/src/
# 单元测试目录(建议使用pytest)
mkdir -pv opsutil/tests
# 单元测试目录
mkdir -pv opsutil/tests/units
# 功能测试目录
# mkdir -pv opsutil/tests/units
# 管理脚本目录(根据需求)
mkdir -pv opsutil/scripts
# 详细文档目录(根据需求)
mkdir -pv opsutil/docs
# 其它文件
touch opsutil/setup.py

setup.py参考

单元测试

pip install pytest