Outline
需要对下面的Python项目进行打包,编写好了 setup.py 后,直接Python setup.py install;
因为Python setup.py install 默认只保留 .py 的文件,所以 static 不在安装路径内,但此处需要它。
├── ./mdlib │ ├── ./mdlib/data_api.py │ ├── ./mdlib/meta_info.py │ ├── ./mdlib/shm_cache.py │ └── ./mdlib/shm_data.py ├── ./README.md ├── ./requirements.txt ├── ./scripts │ ├── ./scripts/clickhouse_import.py │ ├── ./scripts/__init__.py │ ├── ./scripts/README.md │ └── ./scripts/update_bin.log ├── ./setup.cfg ├── ./setup.py ├── ./static │ ├── ./static/paths2.csv │ └── ./static/paths.csv ├── ./tests │ ├── ./tests/README.md │ ├── ./tests/test_get_feature.py │ └── ./tests/test_path_finder.py └── ./utils ├── ./utils/__init__.py └── ./utils/slice_utils.py
网上一大堆说修改 setup.py 中 package_data、include_package_data 就可以完成我的需求,跟着修改了一通,不起作用,安装后依然不见 static 的踪影;
还有说 添加个 MANIFEST.in 文件,在里面写上保存规则即可,跟着设置了,还是不起作用。
解决
思来想去就是想不通问题出在哪里;
后来发现只要目录下包含 __init__.py 的目录,在执行 Python setup.py install 后都可以成功加入安装路径内;
在Python项目中,如果一个目录包含 __init__.py 文件,那么它就是一个 package了;
然后便再static目录下加入 __init__.py ,再执行 Python setup.py install,惊喜的发现安装路径内出现 static 目录了;
至此问题得到解决。
(注:static 目录下加入 __init__.py,且项目根目录下加入 MANIFEST.in 文件)
setup.py
from setuptools import find_packages, setup def read_file(file): with open(file, "rt") as f: return f.read() setup( name='mdlib', # 项目名 description='python投研数据接口', keywords=( "mdlib" ), packages=find_packages(exclude=[]), author='TongDao Technology', author_email='TongDao@forex.com.cn', license='Apache License v2', url='', install_requires=[i for i in read_file("requirements.txt").strip().splitlines() if i != ''], zip_safe=False, )
MANIFEST.in
该文件放在项目根目录下(和setup.py同级),然后执行 Python setup.py install 即可
# 我只用到这一个文件,就指定一个了,其余没用 include static/paths.csv