• python setup.py 如何把非py文件也打包?


    假设我的项目目录大致如下

    myapp/
    ├── myapp
    │   ├── configs
    │   │   ├── data
    │   │   │   └── data.yaml
    │   │   └── trainer
    │   │       └── trainer.yaml
    │   ├── __init__.py
    │   ├── run.py
    │   └── trainer
    │       ├── __init__.py
    │       └── train.py
    └── setup.py
    

    注意要想制作成包的目录下必须要添加__init__.py文件,这里可以看到父目录名是myapp,它包含了一个同名的子目录,当然你也可以把这个子目录改成src,但是我习惯取相同的名字。

    setup.py如下

    from setuptools import setup, find_packages
    
    setup(
        name="myapp",  # you should change "src" to your project name
        version="1.0",
        description="This is my app.",
        author="marsggbo",
        # replace with your own github project link
        #install_requires=["torch>=1.4"],
        packages=find_packages(),
        include_package_data=True,
    )
    
    

    我们运行如下命令

    python setup.py sdist bdist_wheel
    

    你会看到在你的目录下新生成了builddist两个新文件夹,被打包的源代码就在build/lib

    myapp/
    ├── build
    │   ├── bdist.linux-x86_64
    │   └── lib
    │       └── myapp
    │           ├── __init__.py
    │           ├── run.py
    │           └── trainer
    │               ├── __init__.py
    │               └── train.py
    ├── dist
    │   ├── myapp-1.0-py3-none-any.whl
    │   └── myapp-1.0.tar.gz
    ├── myapp
    │   ├── configs
    │   │   ├── data
    │   │   │   └── data.yaml
    │   │   └── trainer
    │   │       └── trainer.yaml
    │   ├── __init__.py
    │   ├── run.py
    │   └── trainer
    │       ├── __init__.py
    │       └── train.py
    ├── myapp.egg-info
    │   ├── dependency_links.txt
    │   ├── PKG-INFO
    │   ├── SOURCES.txt
    │   └── top_level.txt
    └── setup.py
    

    可以看到只有py文件被打包了,而yaml文件都被丢掉了,为了解决这个问题,你需要创建一个MANIFEST.in文件,然后输入一下代码

    recursive-include myapp/configs *.yaml
    

    这一行代码的作用是去递归地提取出 myapp/configs路径下的所有yaml文件,当然如果不需要递归的话,你可以把recursive-include改成include

    现在我们重新执行打包命令

    python setup.py sdist bdist_wheel
    

    这个时候所有yaml文件也成功打包好了

    myapp/
    ├── build
    │   ├── bdist.linux-x86_64
    │   └── lib
    │       └── myapp
    │           ├── configs
    │           │   ├── data
    │           │   │   └── data.yaml
    │           │   └── trainer
    │           │       └── trainer.yaml
    │           ├── __init__.py
    │           ├── run.py
    │           └── trainer
    │               ├── __init__.py
    │               └── train.py
    ├── dist
    │   ├── myapp-1.0-py3-none-any.whl
    │   └── myapp-1.0.tar.gz
    ├── MANIFEST.in
    ├── myapp
    │   ├── configs
    │   │   ├── data
    │   │   │   └── data.yaml
    │   │   └── trainer
    │   │       └── trainer.yaml
    │   ├── __init__.py
    │   ├── run.py
    │   └── trainer
    │       ├── __init__.py
    │       └── train.py
    ├── myapp.egg-info
    │   ├── dependency_links.txt
    │   ├── PKG-INFO
    │   ├── SOURCES.txt
    │   └── top_level.txt
    └── setup.py
    

    微信公众号:AutoML机器学习
    MARSGGBO原创
    如有意合作或学术讨论欢迎私戳联系~
    邮箱:marsggbo@foxmail.com

  • 相关阅读:
    Intellij IDEA 配置Tomcat远程调试
    maven学习二(dependencies)
    maven学习一(HelloWorld工程)
    一致性hash在分布式系统中的应用
    理解TCP之Keepalive
    理解HTTP之keep-alive
    TCP/IP,http,socket,长连接,短连接
    图解 HTTP 协议
    PHP开发的一些趣事
    vue
  • 原文地址:https://www.cnblogs.com/marsggbo/p/16161907.html
Copyright © 2020-2023  润新知