Skip to main content

New Blog

代码人生:编织技术与生活的博客之旅

推荐一下 vim 的视屏学习
玩转 Vim 从放弃到爱不释手 - PegasusWang

这是个人对 PegasusWang 视屏学习笔记

img


图片来自 RUNOOB

img


a append
i insert
o open a line below

A append after line
I insert before line
O append a line above

vs vertical split 
sp split

普通选择 v
选择行 V
ctrl + v 方块选择

y 复制

ctrl + h 删除上一个字符
ctrl + w 删除上一个单词
ctrl + u 删除当前行
ctrl + a 跳到开头
ctrl + e 跳到结尾

快速回到最后编辑 gi

w/W 移到下一个 word/WORD 开头
e/E 下一个 word/WORD 结尾
b/B 回到上一个 word/WORD 开头 backword

f{char} 移动到 char 字符上 F{char} 向前搜索
t{char} 移动到 char 的前面字符上
;, 选择上一个下一个

0 移动到行头 ^移动到行头非空白
$ 移动到行尾 g_移动到行尾非空白

() 在句子间移动
{} 在段落间移动

:help 查看帮助

gg/G 移动到文件开头和结尾
ctrl+o 快速返回
H/M/L 跳到屏幕的 Head / Middle / Lower
Ctrl +u / Ctrl +f 上下翻页 upword / forward
zz 把当前行设置为屏幕中间

d 配合使用删除一个单词
x 删除一个字符

dw 删除单词光标及之后的
daw 删除单词包括之后的空格
diw 删除单词

r replace 替换一个字符 R 不断替换
s substitute 插入模式 S 整行删除进入插入模式
c change
c t {char} 删除 到 char 并进入插入模式

/ or ? 向前向后搜索
n/N 上一个 下一个匹配
\* \# 向前向后匹配 直接搜索当前光标的单词

vim 替换命令
:[range] s[ubstitute]/{pattern}/{string}/[flags]
range 表示范围 比如 :10, 20 表示 10-20 行,%表示全部
pattern 是要替换的模式,string 是替换后文本
Flags 有几个常用的标志
g(global) 表示全局范围内执行
c(confirm) 表示每次确认
n 报告匹配的到的次数而不替换 可以用来查询匹配次数

vim 复制粘贴与寄存器

normal 模式下复制粘贴:
y(yank) 复制
p(paste) 粘贴
d 删除
使用 d 和 p 组合可以达到剪切的效果

visual 模式下选择,normal 模式下再使用 p 粘贴

yiw 复制一个单词 p 粘贴
yy 复制一行 p 粘贴
dd 删除一行 p 粘贴

insert 模式下的粘贴
Ctrl+v(Windows)
Cmd+v(MacOs)
鼠标右键-粘贴

Ctrl + n / ctrl + p 补全单词
ctrl+x ctrl+f 补全文件名
ctrl +x ctrl +o 补全代码

Vim-plug
https://github.com/junegunn/vim-plug
插件搜索:
https://vimawesome.com/

启动界面
https://github.com/mhinz/vim-startify

修改启动界面:https://github.com/mhinz/vim-startify
状态栏美化:https://github.com/vim-airline/vim-airline
增加代码缩进线条:https://github.com/yggdroot/indentline

call plug#begin('~/.vim/plugged')
Plug 'mhinz/vim-startify' " 修改启动界面
Plug 'vim-airline/vim-airline' " vim 状态栏美化
Plug 'vim-airline/vim-airline-themes' " vim 状态栏美化
Plug 'yggdroot/indentline' " 增加代码缩进线条
Plug 'w0ng/vim-hybrid' " 主题 :colorscheme hybrid

Plug 'scrooloose/nerdtree' " 文件目录
Plug 'ctrlpvim/ctrlp.vim' “ 模糊查找
Plug 'easymotion/vim-easymotion' " 文内映射
Plug 'tpope/vim-surround' " 单双引号 修改 ds cs ys
Plug '/usr/local/opt/fzf' " 模糊搜索
Plug 'junegunn/fzf.vim' " 模糊搜索 Ag 模糊搜索字符串 Files 模糊搜索目录
Plug 'brooth/far.vim' " 批量替换
Plug 'majutsushi/tagbar' " 浏览代码用

" Initialize plugin system"
call plug#end()

vim-go go ide
python-mode python 综合 mode
jedi-vim 代码补全
vim-interestingwords 高亮感兴趣的单词
neovim/vim8 异步补全插件
tpope/vim-commentary 代码注释

git 相关
vim-fugitive vim 里用 git
vim-gitgutter vim 里显示文件变动
gv.vim 查看代码提交记录

Tmux 强大的终端管理器

neovim 替代 vim

https://github.com/PegasusWang/vim-config


《Practical vim》
《笨方法学 vimscript》

编程3 min read

每次 Jenkins 走 pipeline 自动构建时,我需要等待构建完成,上到测试环境后再通知测试或者项目去跟近, 最开始想用机器人,后面发现发邮件很简单,我也有邮件弹窗提示,所以让 jenkins 做完后发个做完的邮件给我。

Jenkinsfile 中增加两段代码:

1. 在 stage 该在的地方添加下列代码

        stage("get GIT_COMMIT_NAME/GIT_COMMIT_EMAIL") {    
agent any
steps {
checkout scm
script {
// Git committer name
env.git_commit_name = sh (script: "git --no-pager show -s --format='%an' $GIT_COMMIT",returnStdout: true).trim()
echo "Git committer name: ${GIT_COMMIT_NAME}"
// Git committer email
env.git_commit_email = sh (script: "git --no-pager show -s --format='%ae' $GIT_COMMIT",returnStdout: true).trim()
echo "Git committer email: ${GIT_COMMIT_EMAIL}"
}
}

2. 在文件最后一个花括号前面增加下列代码

    post {    
success {
script {
mail to: "${env.git_commit_email}",
subject: "[Jenkins] SUCCESSFUL: ${env.appName} [${env.BUILD_NUMBER}]",
body: """SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'
分支:${env.BRANCH_NAME}
JOB_NAME: ${env.JOB_NAME}
提交人:${env.git_commit_name}
构建次数:${env.BUILD_NUMBER}
console output:${env.BUILD_URL}
"""
}
}
failure {
script {
mail to: "${env.git_commit_email}",
subject: "[Jenkins] FAILURE: ${env.appName} [${env.BUILD_NUMBER}]",
body: """<p>SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'
分支:${env.BRANCH_NAME}
JOB_NAME: ${env.JOB_NAME}
提交人:${env.git_commit_name}
构建次数:${env.BUILD_NUMBER}
console output:${env.BUILD_URL}
"""
}
}
}

从此自动构建 再也不用盯着构建任务是否结束再通知下游工作人员啦


编程One min read

参考 LINK : fatal error LNK1158: cannot run 'rc.exe'

python 编译 cython 文件的时候

报错如下

    ERROR: Command errored out with exit status 1:    
command: 'd:\programdata\miniconda3\envs\py35\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'D:\\PycharmProjects\\rqalpha-mod-optimizer2\\setup.py'"'"'; __file__='"'"'D:\\PycharmProjects\\rqalpha-mo
d-optimizer2\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' develop --no-deps
cwd: D:\PycharmProjects\rqalpha-mod-optimizer2\
Complete output (38 lines):
running develop
running egg_info
writing requirements to rqalpha_mod_optimizer2.egg-info\requires.txt
writing dependency_links to rqalpha_mod_optimizer2.egg-info\dependency_links.txt
writing rqalpha_mod_optimizer2.egg-info\PKG-INFO
writing top-level names to rqalpha_mod_optimizer2.egg-info\top_level.txt
reading manifest file 'rqalpha_mod_optimizer2.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no previously-included files matching '*' found under directory 'tests'
warning: no previously-included files matching '__pycache__' found under directory '*'
warning: no previously-included files matching '*.py[co]' found under directory '*'
writing manifest file 'rqalpha_mod_optimizer2.egg-info\SOURCES.txt'
running build_ext
cythoning rqalpha_mod_optimizer2\api.py to rqalpha_mod_optimizer2\api.c
cythoning rqalpha_mod_optimizer2\mod.py to rqalpha_mod_optimizer2\mod.c
cythoning rqalpha_mod_optimizer2\_version.py to rqalpha_mod_optimizer2\_version.c
building 'rqalpha_mod_optimizer2.api' extension
creating build
creating build\temp.win-amd64-3.5
creating build\temp.win-amd64-3.5\Release
creating build\temp.win-amd64-3.5\Release\rqalpha_mod_optimizer2
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -Id:\programdata\miniconda3\envs\py35\include -Id:\programdata\miniconda3\envs\py35\include "-IC:\Program Fil
es (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows K
its\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt" /Tcrqalpha_mod_optimizer2\api.c /Fobuild\temp.win-amd64-3.5\Release\rqalpha_mod_optimizer2\api.obj
api.c
creating D:\PycharmProjects\rqalpha-mod-optimizer2\build\lib.win-amd64-3.5
creating D:\PycharmProjects\rqalpha-mod-optimizer2\build\lib.win-amd64-3.5\rqalpha_mod_optimizer2
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:d:\programdata\miniconda3\envs\py35\libs /LIBPATH:d:\programda
ta\miniconda3\envs\py35\PCbuild\amd64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Wi
ndows Kits\10\lib\10.0.17763.0\um\x64" /EXPORT:PyInit_api build\temp.win-amd64-3.5\Release\rqalpha_mod_optimizer2\api.obj /OUT:build\lib.win-amd64-3.5\rqalpha_mod_optimizer2\api.cp35-win_amd64.pyd /IMPLIB:build\temp.win-amd64
-3.5\Release\rqalpha_mod_optimizer2\api.cp35-win_amd64.lib
api.obj : warning LNK4197: export 'PyInit_api' specified multiple times; using first specification
Creating library build\temp.win-amd64-3.5\Release\rqalpha_mod_optimizer2\api.cp35-win_amd64.lib and object build\temp.win-amd64-3.5\Release\rqalpha_mod_optimizer2\api.cp35-win_amd64.exp
Generating code
Finished generating code
LINK : fatal error LNK1158: cannot run 'rc.exe'
d:\programdata\miniconda3\envs\py35\lib\site-packages\Cython\Compiler\Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: D:\PycharmProj
ects\rqalpha-mod-optimizer2\rqalpha_mod_optimizer2\api.py
tree = Parsing.p_module(s, pxd, full_module_name)
d:\programdata\miniconda3\envs\py35\lib\site-packages\Cython\Compiler\Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: D:\PycharmProj
ects\rqalpha-mod-optimizer2\rqalpha_mod_optimizer2\mod.py
tree = Parsing.p_module(s, pxd, full_module_name)
d:\programdata\miniconda3\envs\py35\lib\site-packages\Cython\Compiler\Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: D:\PycharmProj
ects\rqalpha-mod-optimizer2\rqalpha_mod_optimizer2\_version.py
tree = Parsing.p_module(s, pxd, full_module_name)
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\link.exe' failed with exit status 1158
----------------------------------------
Rolling back uninstall of rqalpha-mod-optimizer2
Moving to d:\programdata\miniconda3\envs\py35\lib\site-packages\rqalpha_mod_optimizer2-0.2.5.dist-info\
from d:\programdata\miniconda3\envs\py35\lib\site-packages\~qalpha_mod_optimizer2-0.2.5.dist-info
Moving to d:\programdata\miniconda3\envs\py35\lib\site-packages\rqalpha_mod_optimizer2\
from d:\programdata\miniconda3\envs\py35\lib\site-packages\~qalpha_mod_optimizer2
ERROR: Command errored out with exit status 1: 'd:\programdata\miniconda3\envs\py35\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'D:\\PycharmProjects\\rqalpha-mod-optimizer2\\setup.py'"'"'; __file__='"'
"'D:\\PycharmProjects\\rqalpha-mod-optimizer2\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' dev
elop --no-deps Check the logs for full command output.

解决

C:\Program Files (x86)\Windows Kits\8.1\bin\x86

这个目录下的 rc.exe 和 rcdll.dll 拷贝到我的 Visual C++ 的 VC/Bin 目录下:

D:\Apps\x86\Microsoft\Visual_Studio\v14.0\VC\bin

通过错误信息,我电脑的文件位置是 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\

注意我的 Visual C++ 的安装目录可能和你的不同,你需要用你自己的的 VC/Bin 目录。

哑巴日记

随笔2 min read

PyCharm及 VS Code 快速配置RQSDK上手

PyCharm

为什么要用PyCharm?

  • PyCharm 作为 IDE(集成开发环境),再带 python 解释器和虚拟环境管理功能,开箱即用
  • PyCharm 默认的内置功能极为丰富(Git、数据库支持、框架支持等),无需手动配置插件便可直接使用
  • PyCharm 内置了在业界无出其右的静态代码审查(code inspect)功能

PyCharm 下载

官网提供了专业版和社区版下载。

  • 专业版用于科学计算和 Web 开发。同时具有 HTML、JS 和 SQL 等支持。专业版 PyCharm 支持试用30天。

  • 社区版用于通常的 Python 开发。免费且开源。

创建 PyCharm 工程(Project)

下载且安装完成 PyCharm 后,便可打开 Pycharm 后建立一个工程。该阶段可以设置项目使用的 Python 解释器/虚拟环境,后续开发中的代码提示、调试等功能都依赖为工程配置的虚拟环境:

  1. 点击 Create New Project 按钮
  2. 展开 Project interpreter
  3. 选择虚拟环境(若没有已存在环境,则 PyCharm 会自动创建)
  4. 点击 Create 按钮

建立一个项目

如果没有python环境 ,编辑器右下角会有进度条提示python的安装进度。

工程创建完成后,亦可在设置中修改当前工程使用的虚拟环境:

  1. 点击左上角菜单栏FIle -> Settings(macOS 中为 PyCharm -> Preference)
  2. 点击 Project: **** -> Project Interpreter
  3. 点击右边小齿轮 -> Show All
  4. 点击加号(+) -> 选择虚拟环境(Virtualenv Environment) 或者 Conda 环境(Conda Environment) `

配置python环境

在 PyCharm 中安装 RQSDK

若当前工程配置的虚拟环境中还未安装 RQSDK,可以直接在 PyCharm 中调用终端(terminal)安装,PyCharm 会自动在改终端激活先前配置好的虚拟环境。 若点击左下角 Terminal 以激活终端,输入以下代码以安装 RQSDK

pip install -i https://pypi.douban.com/simple rqsdk     

使用 PyCharm 编写代码

  • 创建 Python 模块(module)鼠标右键项目文件夹 -> New -> Python File -> 输入文件名

  • 若当前工程正确配置了虚拟环境,且虚拟环境中安装了 RQSDK,在 py 文件中输入“rq”时便可以看到 PyCharm 给出的代码提示 image.png

  • 在 py 文件中输入代码,如使用 RQDatac 调取日线数据:

import rqdatac    

rqdatac.init()
print(rqdatac.get_price("000001.XSHE"))
  • 在编辑区域点击右键执行 Run... 便可以运行当前模块,注意,上述代码的运行要求事先使用 rqsdk license 命令配置好 license。

  • 当用了 rqsdk install rqalpha_plus 后,当前python环境也会有 rqoptimizer 和 rqfactor

使用 PyCharm 运行回测

回测在终端中需要通过 rqalpha-plus 命令而非 python 命令运行,故在 PyCharm 中运行回测需要进行一些额外的配置,以简单的 buy-and-hold 回测策略为例。

1 创建名为 buy_and_hold 的 python 模块并键入以下代码:

# buy_and_hold.py    

def init(context):
context.s = "000001.XSHE"
context.fired = False

def handle_bar(context, bar_dict):
if not context.fired:
order_shares(context.s, 1000)
context.fired = True

2 点击右上角的 Add Configuration

打开配置启动参数窗口

3 在打开的窗口中将第一项左侧默认的运行方式由 Script path 修改为 Module name 4 设置 Module namerqalpha_plus,设置 Parameters 为回测运行的子命令 run 及其参数,如:

run -f buy_and_hold.py -s 20190101 -e 20191231 -a stock 20000 --plot    

配置启动命令

5 点击 OK 按钮以完成配置 6 点击右上角的三角形按钮以运行回测,或点击虫子按钮以调试(debug)代码

运行策略


Visual Studio Code (VS Code)

为什么要用 VS Code?

  1. 轻量化,下载安装更快;资源占用低,对配置相对不足的计算机更友好
  2. 启动快速,首次创建工程时没有漫长等待创建索引的过程
  3. 生态健全,有着丰富的第三方主题和插件

Visual Studio Code官网可以下载标准版。

安装 Python 插件(Extensions)

VScode 不是 python 专用的编辑器,故使用其开发 python 需要安装专门的插件支持才能获得代码提示、审查、调试等功能:

  • 在左侧栏点击 Extensions 后,搜索 python,选择搜索到的第一项并点击 install 按钮安装。

image.png

设置虚拟环境/Python 解释器

  • 使用 Ctrl+Shift+P 快捷键(macOS 为 Command+Shift+P)打开 command palette 窗口
  • 输入关键字 python select 并找到 Python: Select Interpreter 一项, 点击该项并在随后弹出的 Python 解释器列表中选择目标虚拟环境中的解释器(若目标虚拟环境未列出,则需要手工输入解释器的路径)

使用 VS Code 编写代码

  • 新建一个文件夹
  • 将文件夹拖入到VS code 窗口
  • 创建py文件 open folder -> new file 文件名:demo_rqdatac.py

创建py文件

VS code 代码补全功能

  • 使用rqdatac 查看平安银行日线数据

文件中输入以下代码:

import rqdatac    

rqdatac.init()
print(rqdatac.get_price("000001.XSHE"))

vs code demo

  • 运行rqalpha-plus 生成样例策略并运行

image.png

运行样例策略需要的命令如下 (假设conda环境名为py35)

conda activate py35    
pip install rqsdk -i https://pypi.douban.com/simple/
rqsdk install rqalpha-plus
rqsdk download-data
rqalpha-plus examples
rqalpha-plus run -f examples/buy_and_hold.py -s 2018-01-01 -e 2018-05-31 -fq 1m --plot --account stock 1000000

命令对应作用如下:

  • 激活名为 py35 的 conda环境,如果没有则输入conda create -n py35
  • 安装 rqsdk和rqalpha-plus
  • 生成样例策略文件夹
  • 使用 examples 的 buy_and_hold.py 策略启动回测

用debug方式运行回测

选择python解释器 1

选择python解释器 2

launch.json配置如下

{    
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: 模块",
"type": "python",
"request": "launch",
"module": "rqalpha-plus",
"args": ["run", "-f", "examples\\buy_and_hold.py", "-s", "2018-01-01", "-e", "2018-05-31", "-fq", "1m", "--plot", "--account", "stock", "1000000"]
}
]
}

debug 运行buy_and_hold.py 1

debug 运行buy_and_hold.py 2

随笔6 min read

转载自《PyPI 打包上传实践》

1. 代码打包

要打包代码,首先需要编写自己的代码包。比如你写了一个。py 文件,里面有一些函数啥的,为了方便调用,你需要将代码打包,下次使用时直接调用就好,因此,第一步,将你写的代码打包。 创建一个文件夹,并在该文件夹下创建 __init__.py 文件,然后将你写的。py 文件放到这个文件夹下面就行。

packagename/    
|
+-- __init__.py
|
+-- myfunction.py
|
+-- mymorefunction.py
|
+-- ...
|

packagename为你创建的包名称,myxxx.py是你写的 python 代码,还有添加个__init__.py文件(文件内容可以为空). 现在你可以调用这个包了(引入包的路径)

import packagename    

2. 符合 pypi 的格式

将上面的文件的目录结构改成如下格式

packagename    
|
+-- COPYING.txt
|
+-- README.rst
|
+-- setup.py
|
+-- packagename
. |
. +-- __init__.py
. |
. +-- myscripts1.py
. |
. +-- mysscripts2.py
. |
. +-- mymorescripts.py
. |
.
|
+-- docs/
|

就是将原来的目录深移一层,文件夹的名称一样即可。在第一层目录下创建些特殊文件。 Tips

  • COPYING.txt : 可以不要(节约时间,重要的事情先说、简单说)。 就是授权文件,里面是你关于这个包的授权,比如:MIT license,那么你里面放入 MIT License 全文即可,当然,如果你不清楚这个,你完全可以不要这个文件。
  • README.rst:就是介绍,可以不要吧(不推荐,要是想让大家用的话还是好好写一写) 这个文件想必研发都应该清楚。如果有,尽量放些东西在这里了,后面如果可能我们会用到它的。
  • setup.py:核心文件 这里面的内容后面讲
  • docs/(这是个文件夹,存放一些文档的) 这个文件夹你放你的 documents 吧,不过要用心写文档真是个难事,所以这个文件夹基本是不存在的——为自己的懒惰可耻一把。

**setup.py **的样例

# coding: utf-8    
import codecs
import os
import sys

try:
from setuptools import setup
except:
from distutils.core import setup

"""
打包的用的 setup 必须引入,
"""

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
if sys.version_info < (2, 5):
sys.exit('Python 2.5 or greater is required.')

try:
from setuptools import setup
except ImportError:
from distutils.core import setup

import SendMoney

with open('README.rst', 'rb') as fp:
readme = fp.read()

# 版本号,自己随便写
VERSION = "1.0.7"

LICENSE = "MIT"

setup(
name='<项目的名称>',
version=VERSION,
description=(
'<项目的简单描述>'
),
long_description=readme,
author='<你的名字>',
author_email='<你的邮件地址>',
maintainer='<维护人员的名字>',
maintainer_email='<维护人员的邮件地址',
license=LICENSE,
packages=find_packages(),
platforms=["all"],
url='<项目的网址,我一般都是 github 的 url>',
install_requires=[
"beautifulsoup4",
lxml_requirement
],
classifiers=[
'Development Status :: 4 - Beta',
'Operating System :: OS Independent',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Programming Language :: Python',
'Programming Language :: Python :: Implementation',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Topic :: Software Development :: Libraries'
],
)

# URL 你这个包的项目地址,如果有,给一个吧,没有你直接填写在 PyPI 你这个包的地址也是可以的
# INSTALL_REQUIRES 模块所依赖的 python 模块
# 以上字段不需要都包含

文中的 classifiers 的内容并不是随便填写的,你需要参照本文参考文档中的 PyPI Classifiers 来写

3、开始使用 Distutils 进行打包

为了保证效果,在打包之前我们可以验证 setup.py 的正确性,执行下面的代码

python setup.py check

输出一般是 running check 如果有错误或者警告,就会在此之后显示 没有任何显示表示 Distutils 认可你这个 setup.py 文件。

如果没有问题,那么就可以正式打包,执行下面的代码:

python setup.py sdist

执行完成后,会在顶层目录下生成 dist 目录和 egg 目录

打包完成后就可以准备将打包好的模块上传到 pypi 了,首先你需要在 pypi 上进行注册 注册完成后,你需要在本地创建好 pypi 的配置文件,不然有可能会出现使用 http 无法上传到 pypi 的问题 在用户目录下创建。pypirc 文件,文件的内容如下 window 用户创建.pypirc可以命名为.pypirc. 位置示例:C:\Users\admin\.pypirc.

[distutils]    
index-servers=pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = <username>
password = <password>

完成后运行:

python setup.py register sdist upload

最后出现Server response (200): OK就是成功了,可以去 pypi 上查看自己发布的包

包到这里,就完成了上传 PyPI 的工作了。你如果要用,安装下就好:

pip install packagename

这个过程还是很顺利的,以后多尝试,出现问题再补充!

作者:snowy_sunny 链接:https://www.jianshu.com/p/be91c70adb27

Python5 min read

RQPro2.0 与 VS code 的集成

安装 Python Extensions

image.png

  • 点击 install安装
  • 安装后重启 VS code

获取 rqpro python 环境路径

image.png

本机的 rqalpha python 环境路径为 D:\Program Files\RQPro\rqalpha\python.exe

新建项目

  1. 新建一个文件夹
  2. 将文件夹拖入到 VS code 窗口
  3. 创建一个。py 文件

image.png

image.png

配置 python 环境

image.png

如果不能选择此 python

需要做如下修改

  1. 选择项目文件夹下 .vscode 文件夹下 settings.json 文件 (没有文件或文件夹则创建)
  2. 将"python.pythonPath"的值改为 python.exe 路径(注意双反斜杠转义) image.png

使用 rqdatac 与 rqfactor

输入下列代码

#!/usr/bin/python3    
# encoding: utf-8
import pandas as pd
import rqdatac
import rqfactor
from rqfactor.execute.engine_data_source import FactorEngineDataSource
from rqfactor.engine import FactorExecutionEngine

rqdatac.init() # 需要账号密码 请参照 rqdata 文档
data_source_path = r'D:\data\rqpro\bundle' # RQPro2.0 - 个人设置 - 数据下载路径

_engine_data_source = FactorEngineDataSource(data_source_path)
engine = FactorExecutionEngine(_engine_data_source)
factor = rqfactor.Factor('close')
order_book_ids = rqdatac.index_components('000300.XSHG')
end_date = pd.Timestamp('20190910')
result = engine.get_multiple(factor, order_book_ids, end_date, 1)
print(result.all())

点击右上角绿色三角形运行 python 代码

image.png

运行 RQAalpha 回测

.vscode文件夹下 launch.json中输入如下代码:

{    
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "rqalpha_plus",
"type": "python",
"request": "launch",
"module": "rqalpha_plus",
"args": [
"run", "-s", "2015-03-01", "-e", "2015-05-01",
"-f", "${file}",
"--account", "stock", "10000", "--frequency", "1d", "--benchmark", "000300.XSHG",
"--commission-multiplier", "1", "--margin-multiplier", "1", "--matching-type", "current_bar", "--slippage", "0"
],
"env": {"PYTHONIOENCODING": "utf-8"}
}
]
}
  • 选择策略文件 使用 debug 模式运行

image.png

随笔2 min read

  • 线上自动编译时出现错误 SyntaxError: invalid syntax
  • 谷歌上搜 nonlocal open_cite_tag 没有任何相关信息
Running Sphinx v1.7.9    
loading translations [zh_CN]... done

Traceback (most recent call last):
File "/home/docs/checkouts/readthedocs.org/user_builds/rqalpha/envs/develop/local/lib/python2.7/site-packages/sphinx/cmdline.py", line 303, in main
args.warningiserror, args.tags, args.verbosity, args.jobs)
File "/home/docs/checkouts/readthedocs.org/user_builds/rqalpha/envs/develop/local/lib/python2.7/site-packages/sphinx/application.py", line 191, in __init__
self.setup_extension(extension)
File "/home/docs/checkouts/readthedocs.org/user_builds/rqalpha/envs/develop/local/lib/python2.7/site-packages/sphinx/application.py", line 411, in setup_extension
self.registry.load_extension(self, extname)
File "/home/docs/checkouts/readthedocs.org/user_builds/rqalpha/envs/develop/local/lib/python2.7/site-packages/sphinx/registry.py", line 315, in load_extension
mod = __import__(extname, None, None, ['setup'])
File "/home/docs/checkouts/readthedocs.org/user_builds/rqalpha/envs/develop/local/lib/python2.7/site-packages/nbsphinx.py", line 1088
nonlocal open_cite_tag
^
SyntaxError: invalid syntax

Exception occurred:
File "/home/docs/checkouts/readthedocs.org/user_builds/rqalpha/envs/develop/local/lib/python2.7/site-packages/sphinx/registry.py", line 315, in load_extension
mod = __import__(extname, None, None, ['setup'])
File "/home/docs/checkouts/readthedocs.org/user_builds/rqalpha/envs/develop/local/lib/python2.7/site-packages/nbsphinx.py", line 1088
nonlocal open_cite_tag
^
SyntaxError: invalid syntax
The full traceback has been saved in /tmp/sphinx-err-cnpEVe.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at https://github.com/sphinx-doc/sphinx/issues. Thanks!

对照后发现 nbsphinx ==0.3.5 时会成功 requirements.txt 文件加上版本限制就 ok

  • cat requirements.txt
Sphinx    
watchdog
sphinx_rtd_theme
nbsphinx ==0.3.5
jupyter_client

image.png

编程One min read

https://blog.csdn.net/the_victory/article/details/52781357

  1. 首先打开你的 starUML 安装目录,并找到 LicenseManagerDomain.js,starUML 是用 NodeJS 写的,这个文件就是判断注册用户的文件,我的目录是:D:\Program Files (x86)\StarUML\www\license\node\LicenseManagerDomain.js
  2. 修改该文件,找到第 24 行,加入如下所示区域的代码。
    function validate(PK, name, product, licenseKey) {    
var pk, decrypted;

//edit by ChrisChang, 加入如下几行
return {
name: "Chang",//随意
product: "StarUML",
licenseType: "vip",
quantity: "blog.csdn.net/the_victory",//随意
licenseKey: "later equals never!"
};
//-------------END

try {
pk = new NodeRSA(PK);
decrypted = pk.decrypt(licenseKey, 'utf8');
} catch (err) {
return false;
}
var terms = decrypted.trim().split("\n");
if (terms[0] === name && terms[1] === product) {
return {
name: name,
product: product,
licenseType: terms[2],
quantity: terms[3],
licenseKey: licenseKey
};
} else {
return false;
}
}

  1. 重启 starUML 需要在 help->Enter License 选项里面输入你代码里写的 name 和 licensekey。
  2. 重启 starUML,你会发现已经没有提示了,然后点击 help->about starUML, 结果如下

编程One min read

  • oculus quest2 本文中简称 OC2


问题由来

最近发行的 oculus quest2 的价格已经到 2k+了,广告铺天盖地的。

对于这件事情,让我想起了小米发布第一部手机时,1999 价格出来的那一刻。

此时,同等价位其他手机卖不出去,大家都得把手机价格打下来手机行业开始内卷


OC2 出现了 199 美元,这个和小米 1999RMB 的小米 1 一样的感觉,感觉 VR 硬件也发展成熟,要打价格战的时候了。知乎上说 OC2 对标的是 NS。确实 2k 多 买个 NS 游戏还得花很多钱,OC2 无限连接电脑玩 Steam 上的游戏要爽得多。

OC2 目前我觉得的优点:

  • 2 基于四个摄像头定位,不再需要定位传感器。
  • 支持无线串流 无需线材就能上 Steam 玩游戏(得要好 wifi)。
  • 自带游戏平台,没得显卡一样能玩。

所以,当前的 VR,2k 就得到一个很好的体验了,也不需要太多场地,当然,得会用梯子

设备价格下来了,那么应用市场则会更大,玩家有更多购买游戏(玩盗版)的机会。

VR 目前还没出现内卷,先到先占位,OC2 作为第一个开始,打破市场的商家,马上硬件会产生内卷现象,然后 VR 软件业蓬勃发展。目前我觉得是个风口。


HOW TO DO

风口来了,当然想进去赚钱,要么打工,要么提供打工。

打工

  • 首先,本人只想做 python 相关的后端。
  • 其次,还想 [逃离 996 环境] - [[远程工作分析]]。

在深圳找了找,VR 游戏公司只有三四家,且基本上不要 python。(还在继续找。..)


Another choice

机缘巧合下,和一个游戏运营大佬聊了聊。大佬目前在开 VR 体验店(据说是在赔钱)。

以下是大佬的观点:

在深圳,所有的互联网企业离不开腾讯阿里,基本上背后都腾讯和阿里的投资。那么做 IT 的,最终目标有两个,要么进入阿里腾讯,要么公司被阿里腾讯收购,似乎没有别的路走(有的话请留言)。

考虑自己做工作室 or 进腾讯阿里,之前的工作室散伙,优秀的去了腾讯,不优秀的留在了市场。

觉得自己能行,从腾讯出来创业的,最后还是要么被腾讯投资控股,要么被腾讯投资控股的公司打败。大部分从腾讯出来的混的好像不咋样。

如果自己有闲钱,可以考虑找几个伙伴合伙做游戏。

先了解下这几个游戏:

  • vr 和键鼠同时支持的游戏 payday2
  • 三消做得非常棒的游戏 mirro (自带官网 18h 补丁)

用 Unity 或者 RPG maker 做一点自己的成品。(虚幻 4 要收费)


目前想法

  • 考虑深圳的 vr 公司
  • 独立游戏工作室
  • 做成一个游戏后,上 steam 平台。证明自己 。(考虑反着抄 把同样的模式抄到不同领域)

ps, 网上有说 python 能开发 unity 3d 的程序,我只找到了 python2 的开发方式。参考。

ps. 公司选择范围小的话,可以选择精投。 大概推荐以下做法

  • 带自荐信。
  • 了解这个公司内部架构和人员信息。
  • 按对方需求写简历。
  • 找到内部人员内推。

随笔3 min read