我才是不是标题党 我才不是标题党 我是标题党 阿呸...
想必大家肯定很好奇编译教程对吧 。 主要针对的是linux 环境ubuntu 19.04 (18.04) 也是可以的。
因为windows可以直接用哈 具体看setup.py的代码
废话不多说哦 ..... 以ctp为例
然后 然后 emmmmm
假定我们新建一个文件夹 , 文件结构如下
ctpapi
---->ctpapi
---------> ctp
---------> init.py
----> setup.py
---->MAINFEST.in
1 , 我们复制一份 vnpy/api下面的ctp目录 覆盖 ctpapi 的ctp目录哦
此时变化为
ctpapi
---->ctpapi
---------> ctp(覆盖后的)
---------> init.py
----> setup.py
---->MAINFEST.in
上面的init前后要加两个下划线 ,吐槽编辑器 过滤掉了。。
MAINFEST.in 的内容
# include MANIFEST.in
include README.md
recursive-include ctpapi/ctp *
然后我们在setup.py中写入以下内容
import platform
from setuptools import Extension, setup
dir_path = "ctpapi"
if platform.uname().system == "Windows":
compiler_flags = [
"/MP", "/std:c++17", # standard
"/O2", "/Ob2", "/Oi", "/Ot", "/Oy", "/GL", # Optimization
"/wd4819" # 936 code page
]
extra_link_args = []
else:
compiler_flags = [
"-std=c++17", # standard
"-O3", # Optimization
"-Wno-delete-incomplete", "-Wno-sign-compare", "-pthread"
]
extra_link_args = ["-lstdc++"]
vnctpmd = Extension(
# 指定 vnctpmd 的位置
"ctpapi.ctp.vnctpmd",
[
f"{dir_path}/ctp/vnctp/vnctpmd/vnctpmd.cpp",
],
# 编译需要的头文件
include_dirs=[
f"{dir_path}/ctp/include",
f"{dir_path}/ctp/vnctp",
],
# 指定为c plus plus
language="cpp",
define_macros=[],
undef_macros=[],
# 依赖目录
library_dirs=[f"{dir_path}/ctp/libs", f"{dir_path}/ctp"],
# 依赖项
libraries=["thostmduserapi_se", "thosttraderapi_se", ],
extra_compile_args=compiler_flags,
extra_link_args=extra_link_args,
depends=[],
runtime_library_dirs=["$ORIGIN"],
)
vnctptd = Extension(
"ctpapi.ctp.vnctptd",
[
f"{dir_path}/ctp/vnctp/vnctptd/vnctptd.cpp",
],
include_dirs=[
f"{dir_path}/ctp/include",
f"{dir_path}/ctp/vnctp",
],
define_macros=[],
undef_macros=[],
library_dirs=[f"{dir_path}/ctp/libs", f"{dir_path}/ctp"],
libraries=["thostmduserapi_se", "thosttraderapi_se"],
extra_compile_args=compiler_flags,
extra_link_args=extra_link_args,
runtime_library_dirs=["$ORIGIN"],
depends=[],
language="cpp",
)
if platform.system() == "Windows":
# use pre-built pyd for windows ( support python 3.7 only )
ext_modules = []
# if you really want to build it . please check your environment (没测试过)
# ext_modules = [vnctptd, vnctpmd]
elif platform.system() == "Darwin":
ext_modules = []
else:
ext_modules = [vnctptd, vnctpmd]
pkgs = ['ctpapi', 'ctpapi.ctp']
install_requires = []
setup(
name='ctpapi',
version='1.0',
description="good luck",
author='somewheve',
author_email='####',
license="MIT",
packages=pkgs,
install_requires=install_requires,
platforms=["Windows", "Linux", "Mac OS-X"],
package_dir={'ctpapi': 'ctpapi/'},
package_data={'ctpapi': ['ctp/*', ]},
ext_modules=ext_modules,
classifiers=[
'Development Status :: 4 - Beta',
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Programming Language :: Python :: 3.7',
]
)
切换你的目录到setup.py的同级 ,打开命令行 。然后输入
python3.7 setup.py build
好像你就可以在ctpapi/build/lib.linux-x86_64-3.7/ctpapi/ctp 下面找到vnctpmd.cpython-37m-x86_64-linux-gnu.so 和 vnctptd.cpython-37m-x86_64-linux-gnu.so
把里面的ctpapi 复制出来放到一个新的地方
然后
在ctpapi的同级目录下打开Python3.7命令行输入
from ctpapi.ctp import vnctpmd
from ctpapi.ctp import vnctptd
具体代码我放到github上面 传说中的传送门
下载来 进入目录输入命令 python3.7 setup.py build 即可开始编译
当然你要注意自己环境 比如Gcc那些什么的。
ps: 如果我告诉你 上面的执行会出错你会不会打我?(即使编译不出错用起来也会出错的) 好吧 还需要安装语言支持
sudo locale-gen zh_CN.GB18030
请注意你的Python版本为3.7
ok 大功告成 !
最后插一句如果有帮到你点个star哈