“惊鸿一瞥”
- 0. 前置准备
- 1. 情况说明
- 1.1 单个文件
- 1.2 整个项目
- 2. 做一个文件
- 2.1 打包
- 2.2 安装打好的包进行测试
- 2.3 测试
- 2.4 查看和卸载
- 2.4.1 卸载
- 3. 做一个项目
- 3.1 值得注意
- 4. 上传到官网
- 5. 总结文件夹架构
0. 前置准备
打开命令行窗口,安装一个setuptools包和分发工具,该工具被setup.py调用,实现库的构造。
pip install setuptools
1. 情况说明
我已经有了一个训练好的模型和项目,为了方便更多人便捷的使用。决定将它封装成库,其他人通过import
方法即可使用(这里用CPU测试使用)。
1.1 单个文件
- 测试的单个执行文件打包的架构如下:
--自己的项目
----项目下的子项目
----setup.py (比较重要,后文有赘述,主要是该包的描述)
------__init_.py (什么都不用写,只是一个代表入口)
------python_exe1.py (自己的单文件)
setup.py文件如下:
import setuptools
setuptools.setup(
name="Test_Car_312", #后期pip uninstall 需要的名字 (尽量这里的所有名字都和文件夹名统一吧,不然难得折腾)
version="1.0",
author="CHD.qhl",
author_email="qinsober@163.com",
description="test car",
long_description="this is a package about test car's index like plate, brand,color and so on",
long_description_content_type="Test_car", #后期需要import的名字
packages=setuptools.find_packages(), #这样安装的搜索包只会添加进入含有__init__.py文件的目录打包进去
# install_requires=["python"], #安装需求
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
)
python_exe1.py文件如下(放一个可执行的函数即可):
def hello():
print("hello this is my api")
1.2 整个项目
- 测试的项目的架构如下:
2. 做一个文件
在完成上述1.1的准备后,按下列步骤执行。为加深理解,可以去官网查看相关的解释和定义。
2.1 打包
- 移动到setup.py文件夹路径下,并用cmd形式打开,执行:
python setup.py sdist
执行完毕,命令行结果如下:
之后对比会发现多了两个文件夹,如下:
--/自己的项目
----/disk (新生成的,该文件夹下存在可以被pip install 的包用以引用)
--------Test_Car_312-1.0.tar.gz(新生成的,包名-版本号)
----/Test_Car_312.egg-info*(新生成的,一些中间文件,不一一列举了)
----/项目下的子项目
----setup.py (比较重要,后文有赘述,主要是该包的描述)
--------__init_.py (什么都不用写,只是一个代表入口)
--------python_exe1.py (自己的单文件)
2.2 安装打好的包进行测试
上边已经生成了Test_Car_312-1.0.tar.gz文件,直接对其进行pip install
即可。
- 键入如下命令进行:
python install Test_Car_312-1.0.tar.gz
如果因为version问题无法安装成功,选择信任它的来源即可,键入如下代码:
python install Test_Car_312-1.0.tar.gz --trusted-host
2.3 测试
此时不出意外,执行2.2后已经成功了,控制台输出如下:
可以看到pip install 后,系统中安装好了包。这里import的是构建时文件夹下的包名Test_Car
- 为了查看系统的包安装的地方,我们可以使用python
from Test_Car import hello
导入成功!
- 执行代码:
hello.hello_312()
控制台成功输出之前写的代码hello this is my api
2.4 查看和卸载
通过查看sys.path的搜索路径并且一个一个的寻找,我终于找到了pip 安装后的路径。
由于我是在conda的虚拟环境下安装的,环境名为yolov5,它的路径如下:
D:\work_software\installed\Anaconda3\installed\envs\yolov5\Lib\site-packages
基本就是
anaconda安装路径/envs/环境名/Lib/site-packages
展开查看如下:
2.4.1 卸载
- 卸载这里需要注意,如果把不准就pip list查看一下包名再卸载。这里的包名是上边提到的setup.py中的
name
后边的参数:
卸载命令:
pip uninstall Test_Car_312
3. 做一个项目
这里以yolo项目为例,将整个yolo项目/与train.py同级这里算一整个目录,所有文件均移动到项目下的子项目这一栏:之后的文件目录如下:
--/整个转移项目结构
----/需要移植的项目
----setup.py (比较重要,后文有赘述,主要是该包的描述)
------/__init_.py (什么都不用写,只是一个代表入口)
------yolo....一堆并列文件 (自己的yolo文件夹,很多文件啊)
之后仍然和之前一样即可。
3.1 值得注意
前文setup.py提到的搜索包的方式可以通过:
- 自己指定需要搜索的包的文件夹和文件
- 只搜索有__init__.py文件夹的打包加入到库中
这里选择的是第二种方式,所以对需要用得到包,需要加入一个空白的__init__.py文件
4. 上传到官网
此时可以通过官网下载
- 在pypi官网注册账号:官网:https://pypi.org/
- 执行 pip install twine
- 执行twine upload dist/*上传包, 上传包过程中需输入用户名、密码
- 执行pip install 包名安装包
5. 总结文件夹架构
总结以上规律可得,假如你有一个需要转移的项目,你只需要这么做:
--/你的项目
改变成如下结构:
--/你的项目(一个文件夹)
----项目空间...下有很多文件
----__init__.py
--setup.py