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