mirror of
https://github.com/wassname/catalyst.git
synced 2026-06-28 01:14:26 +08:00
434 lines
19 KiB
HTML
434 lines
19 KiB
HTML
|
||
|
||
<!DOCTYPE html>
|
||
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
||
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
||
<head>
|
||
<meta charset="utf-8">
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
||
<title>Release Process — Catalyst 0.4 documentation</title>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="index" title="Index"
|
||
href="genindex.html"/>
|
||
<link rel="search" title="Search" href="search.html"/>
|
||
<link rel="top" title="Catalyst 0.4 documentation" href="index.html"/>
|
||
|
||
|
||
<script src="_static/js/modernizr.min.js"></script>
|
||
|
||
</head>
|
||
|
||
<body class="wy-body-for-nav" role="document">
|
||
|
||
|
||
<div class="wy-grid-for-nav">
|
||
|
||
|
||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||
<div class="wy-side-scroll">
|
||
<div class="wy-side-nav-search">
|
||
|
||
|
||
|
||
<a href="index.html" class="icon icon-home"> Catalyst
|
||
|
||
|
||
|
||
</a>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div role="search">
|
||
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
||
<input type="text" name="q" placeholder="Search docs" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<ul>
|
||
<li class="toctree-l1"><a class="reference internal" href="install.html">Install</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="beginner-tutorial.html">Catalyst Beginner Tutorial</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="live-trading.html">Live Trading</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="features.html">Features</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="example-algos.html">Example Algorithms</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="utilities.html">Utilities</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="videos.html">Videos</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="resources.html">Resources</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="development-guidelines.html">Development Guidelines</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="releases.html">Release Notes</a></li>
|
||
</ul>
|
||
|
||
|
||
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
||
|
||
|
||
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
||
|
||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
<a href="index.html">Catalyst</a>
|
||
|
||
</nav>
|
||
|
||
|
||
|
||
<div class="wy-nav-content">
|
||
<div class="rst-content">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div role="navigation" aria-label="breadcrumbs navigation">
|
||
|
||
<ul class="wy-breadcrumbs">
|
||
|
||
<li><a href="index.html">Docs</a> »</li>
|
||
|
||
<li>Release Process</li>
|
||
|
||
|
||
<li class="wy-breadcrumbs-aside">
|
||
|
||
|
||
<a href="_sources/release-process.rst.txt" rel="nofollow"> View page source</a>
|
||
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
<hr/>
|
||
</div>
|
||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||
<div itemprop="articleBody">
|
||
|
||
<div class="section" id="release-process">
|
||
<h1>Release Process<a class="headerlink" href="#release-process" title="Permalink to this headline">¶</a></h1>
|
||
<div class="admonition note">
|
||
<p class="first admonition-title">Note</p>
|
||
<p class="last">This page is intended for developers of zipline.</p>
|
||
</div>
|
||
<div class="section" id="updating-the-release-notes">
|
||
<h2>Updating the Release Notes<a class="headerlink" href="#updating-the-release-notes" title="Permalink to this headline">¶</a></h2>
|
||
<p>When we are ready to ship a new release of zipline, edit the <a class="reference internal" href="releases.html"><span class="doc">Release Notes</span></a>
|
||
page. We will have been maintaining a whatsnew file while working on the release
|
||
with the new version. First, find that file in:
|
||
<code class="docutils literal"><span class="pre">docs/source/whatsnew/<version>.txt</span></code>. It will be the highest version number.
|
||
Edit the release date field to be today’s date in the format:</p>
|
||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="o"><</span><span class="n">month</span><span class="o">></span> <span class="o"><</span><span class="n">day</span><span class="o">></span><span class="p">,</span> <span class="o"><</span><span class="n">year</span><span class="o">></span>
|
||
</pre></div>
|
||
</div>
|
||
<p>for example, November 6, 2015.
|
||
Remove the active development warning from the whatsnew, since it will no
|
||
longer be pending release.
|
||
Update the title of the release from “Development” to “Release x.x.x” and
|
||
update the underline of the title to match the title’s width.</p>
|
||
<p>If you are renaming the release at this point, you’ll need to git mv the file
|
||
and also update releases.rst to reference the renamed file.</p>
|
||
<p>To build and view the docs locally, run:</p>
|
||
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ <span class="nb">cd</span> docs
|
||
$ make html
|
||
$ <span class="o">{</span>BROWSER<span class="o">}</span> build/html/index.html
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="updating-the-python-stub-files">
|
||
<h2>Updating the Python stub files<a class="headerlink" href="#updating-the-python-stub-files" title="Permalink to this headline">¶</a></h2>
|
||
<p>PyCharm and other linters and type checkers can use <a class="reference external" href="https://www.python.org/dev/peps/pep-0484/#stub-files">Python stub files</a> for type hinting. For
|
||
example, we generate stub files for the <code class="xref py py-mod docutils literal"><span class="pre">api</span></code> namespace, since that
|
||
namespace is populated at import time by decorators on TradingAlgorithm
|
||
methods. Those functions are therefore hidden from static analysis tools, but
|
||
we can generate static files to make them available. Under <strong>Python 3</strong>, run
|
||
the following to generate any stub files:</p>
|
||
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ python etc/gen_type_stubs.py
|
||
</pre></div>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="first admonition-title">Note</p>
|
||
<p class="last">In order to make stub consumers aware of the classes referred to in the
|
||
stub, the stub file should import those classes. However, since
|
||
<code class="docutils literal"><span class="pre">...</span> <span class="pre">import</span> <span class="pre">*</span></code> and <code class="docutils literal"><span class="pre">...</span> <span class="pre">import</span> <span class="pre">...</span> <span class="pre">as</span> <span class="pre">...</span></code> in a stub file will export
|
||
those imports, we import the names explicitly. For the stub for
|
||
<code class="docutils literal"><span class="pre">zipline.api</span></code>, this is done in a header string in the
|
||
<code class="docutils literal"><span class="pre">gen_type_stubs.py</span></code> script mentioned above. If new classes are added as
|
||
parameters or return types of <code class="docutils literal"><span class="pre">zipline.api</span></code> functions, then new imports
|
||
should be added to that header.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="updating-the-version">
|
||
<h2>Updating the <code class="docutils literal"><span class="pre">__version__</span></code><a class="headerlink" href="#updating-the-version" title="Permalink to this headline">¶</a></h2>
|
||
<p>We use <a class="reference external" href="https://github.com/warner/python-versioneer">versioneer</a> to
|
||
manage the <code class="docutils literal"><span class="pre">__version__</span></code> and <code class="docutils literal"><span class="pre">setup.py</span></code> version. This means that we pull
|
||
this information from our version control’s tags to ensure that they stay in
|
||
sync and to have very fine grained version strings for development installs.</p>
|
||
<p>To upgrade the version use the git tag command like:</p>
|
||
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ git tag <major>.<minor>.<micro>
|
||
$ git push <span class="o">&&</span> git push --tags
|
||
</pre></div>
|
||
</div>
|
||
<p>This will push the the code and the tag information.</p>
|
||
<p>Next, click the “Draft a new release” button on the <a class="reference external" href="https://github.com/quantopian/zipline/releases">zipline releases page</a>. For the new release,
|
||
choose the tag you just pushed, and publish the release.</p>
|
||
</div>
|
||
<div class="section" id="uploading-pypi-packages">
|
||
<h2>Uploading PyPI packages<a class="headerlink" href="#uploading-pypi-packages" title="Permalink to this headline">¶</a></h2>
|
||
<div class="section" id="sdist">
|
||
<h3><code class="docutils literal"><span class="pre">sdist</span></code><a class="headerlink" href="#sdist" title="Permalink to this headline">¶</a></h3>
|
||
<p>To build the <code class="docutils literal"><span class="pre">sdist</span></code> (source distribution) run:</p>
|
||
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ python setup.py sdist
|
||
</pre></div>
|
||
</div>
|
||
<p>from the zipline root. This will create a gzipped tarball that includes all the
|
||
python, cython, and miscellaneous files needed to install zipline. To test that
|
||
the source dist worked correctly, <code class="docutils literal"><span class="pre">cd</span></code> into an empty directory, create a new
|
||
virtualenv and then run:</p>
|
||
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ pip install <zipline-root>/dist/zipline-<major>.<minor>.<micro>.tar.gz
|
||
$ python -c <span class="s1">'import zipline;print(zipline.__version__)'</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This should print the version we are expecting to release.</p>
|
||
<div class="admonition note">
|
||
<p class="first admonition-title">Note</p>
|
||
<p class="last">It is very important to both <code class="docutils literal"><span class="pre">cd</span></code> into a clean directory and make a clean
|
||
virtualenv. Changing directories ensures that we have included all the needed
|
||
files in the manifest. Using a clean virtualenv ensures that we have listed
|
||
all the required packages.</p>
|
||
</div>
|
||
<p>Now that we have tested the package locally, it should be tested using the test
|
||
PyPI server.</p>
|
||
<p>Edit your <code class="docutils literal"><span class="pre">~/.pypirc</span></code> file to look like:</p>
|
||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">distutils</span><span class="p">]</span>
|
||
<span class="n">index</span><span class="o">-</span><span class="n">servers</span> <span class="o">=</span>
|
||
<span class="n">pypi</span>
|
||
<span class="n">pypitest</span>
|
||
|
||
<span class="p">[</span><span class="n">pypi</span><span class="p">]</span>
|
||
<span class="n">username</span><span class="p">:</span>
|
||
<span class="n">password</span><span class="p">:</span>
|
||
|
||
<span class="p">[</span><span class="n">pypitest</span><span class="p">]</span>
|
||
<span class="n">repository</span><span class="p">:</span> <span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="n">testpypi</span><span class="o">.</span><span class="n">python</span><span class="o">.</span><span class="n">org</span><span class="o">/</span><span class="n">pypi</span>
|
||
<span class="n">username</span><span class="p">:</span>
|
||
<span class="n">password</span><span class="p">:</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>after that, run:</p>
|
||
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ python setup.py sdist upload -r pypitest
|
||
</pre></div>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="first admonition-title">Note</p>
|
||
<p>If the package version has been taken: locally update your setup.py to
|
||
override the version with a new number. Do not use the next version, just
|
||
append a <code class="docutils literal"><span class="pre">.<nano></span></code> section to the current version. PyPI prevents the same
|
||
package version from appearing twice, so we need to work around this when
|
||
debugging packaging problems on the test server.</p>
|
||
<div class="last admonition warning">
|
||
<p class="first admonition-title">Warning</p>
|
||
<p class="last">Do not commit the temporary version change.</p>
|
||
</div>
|
||
</div>
|
||
<p>This will upload zipline to the pypi test server. To test installing from pypi,
|
||
create a new virtualenv, <code class="docutils literal"><span class="pre">cd</span></code> into a clean directory and then run:</p>
|
||
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ pip install --extra-index-url https://testpypi.python.org/pypi zipline
|
||
$ python -c <span class="s1">'import zipline;print(zipline.__version__)'</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This should pull the package you just uploaded and then print the version
|
||
number.</p>
|
||
<p>Now that we have tested locally and on PyPI test, it is time to upload to PyPI:</p>
|
||
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ python setup.py sdist upload
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="bdist">
|
||
<h3><code class="docutils literal"><span class="pre">bdist</span></code><a class="headerlink" href="#bdist" title="Permalink to this headline">¶</a></h3>
|
||
<p>Because zipline now supports multiple versions of numpy, we’re not building
|
||
binary wheels, since they are not tagged with the version of numpy with which
|
||
they were compiled.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="documentation">
|
||
<h2>Documentation<a class="headerlink" href="#documentation" title="Permalink to this headline">¶</a></h2>
|
||
<p>To update <a class="reference external" href="http://www.zipline.io/index.html">zipline.io</a>, checkout the
|
||
latest master and run:</p>
|
||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o"><</span><span class="n">zipline_root</span><span class="o">>/</span><span class="n">docs</span><span class="o">/</span><span class="n">deploy</span><span class="o">.</span><span class="n">py</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This will build the documentation, checkout a fresh copy of the <code class="docutils literal"><span class="pre">gh-pages</span></code>
|
||
git branch, and copy the built docs into the zipline root.</p>
|
||
<div class="admonition note">
|
||
<p class="first admonition-title">Note</p>
|
||
<p class="last">The docs should always be built with <strong>Python 3</strong>. Many of our api functions
|
||
are wrapped by preprocessing functions which accept *args and **kwargs. In
|
||
Python 3, sphinx will respect the <code class="docutils literal"><span class="pre">__wrapped__</span></code> attribute and display the
|
||
correct arguments.</p>
|
||
</div>
|
||
<p>Now, using our browser of choice, view the <code class="docutils literal"><span class="pre">index.html</span></code> page and verify that
|
||
the docs look correct.</p>
|
||
<p>Once we are happy, push the updated docs to the GitHub <code class="docutils literal"><span class="pre">gh-pages</span></code> branch.</p>
|
||
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ git add .
|
||
$ git commit -m <span class="s2">"DOC: update zipline.io"</span>
|
||
$ git push origin gh-pages
|
||
</pre></div>
|
||
</div>
|
||
<p><a class="reference external" href="http://www.zipline.io/index.html">zipline.io</a> will update in a few moments.</p>
|
||
</div>
|
||
<div class="section" id="uploading-conda-packages">
|
||
<h2>Uploading conda packages<a class="headerlink" href="#uploading-conda-packages" title="Permalink to this headline">¶</a></h2>
|
||
<p>Travis and AppVeyor build zipline conda packages for us. Once they have built
|
||
and uploaded to anaconda.org the packages (and their dependencies) for the
|
||
release commit to master, we should move those packages from the “ci” label to
|
||
the “main” label. You can do this from the anaconda.org web interface. This
|
||
is also a good time to remove all the old “ci” packages from anaconda.</p>
|
||
<p>Travis and AppVeyor only build and upload linux-64 and win-64 packages. We’ll
|
||
need to build and upload osx-64 packages manually on an OSX machine.</p>
|
||
<p>To build the conda packages for zipline locally, run:</p>
|
||
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ python etc/conda_build_matrix.py
|
||
</pre></div>
|
||
</div>
|
||
<p>If all of the builds succeed, then this will not print anything and exit with
|
||
<code class="docutils literal"><span class="pre">EXIT_SUCCESS</span></code>. If there are build issues, we must address them and decide
|
||
what to do.</p>
|
||
<p>Once all of the builds in the matrix pass, we can upload them to anaconda with:</p>
|
||
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ python etc/conda_build_matrix.py --upload
|
||
</pre></div>
|
||
</div>
|
||
<p>If you would like to test this command by uploading to a different user, this
|
||
may be specified with the <code class="docutils literal"><span class="pre">--user</span></code> flag.</p>
|
||
</div>
|
||
<div class="section" id="next-commit">
|
||
<h2>Next Commit<a class="headerlink" href="#next-commit" title="Permalink to this headline">¶</a></h2>
|
||
<p>Push a new commit post-release that adds the whatsnew for the next release,
|
||
which should be titled according to a micro version increment. If that next
|
||
release turns out to be a major/minor version increment, the file can be
|
||
renamed when that’s decided. You can use <code class="docutils literal"><span class="pre">docs/source/whatsnew/skeleton.txt</span></code>
|
||
as a template for the new file.</p>
|
||
<p>Include the whatsnew file in <code class="docutils literal"><span class="pre">docs/source/releases.rst</span></code>. New releases should
|
||
appear at the top. The syntax for this is:</p>
|
||
<div class="highlight-python"><div class="highlight"><pre><span></span><span class="o">..</span> <span class="n">include</span><span class="p">::</span> <span class="n">whatsnew</span><span class="o">/<</span><span class="n">version</span><span class="o">>.</span><span class="n">txt</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
<div class="articleComments">
|
||
|
||
</div>
|
||
</div>
|
||
<footer>
|
||
|
||
|
||
<hr/>
|
||
|
||
<div role="contentinfo">
|
||
<p>
|
||
© Copyright 2018, Enigma MPC, Inc..
|
||
|
||
</p>
|
||
</div>
|
||
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||
|
||
</footer>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
</section>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
<script type="text/javascript">
|
||
var DOCUMENTATION_OPTIONS = {
|
||
URL_ROOT:'./',
|
||
VERSION:'0.4',
|
||
COLLAPSE_INDEX:false,
|
||
FILE_SUFFIX:'.html',
|
||
HAS_SOURCE: true,
|
||
SOURCELINK_SUFFIX: '.txt'
|
||
};
|
||
</script>
|
||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||
|
||
|
||
|
||
|
||
|
||
<script type="text/javascript" src="_static/js/theme.js"></script>
|
||
|
||
|
||
|
||
|
||
<script type="text/javascript">
|
||
jQuery(function () {
|
||
SphinxRtdTheme.StickyNav.enable();
|
||
});
|
||
</script>
|
||
|
||
|
||
</body>
|
||
</html> |