diff --git a/.github/workflows/build-site.yml b/.github/workflows/build-site.yml
index 07fc8d60..732c085e 100644
--- a/.github/workflows/build-site.yml
+++ b/.github/workflows/build-site.yml
@@ -35,4 +35,4 @@ jobs:
arguments: |
--ignore-urls "https://fonts.googleapis.com,https://fonts.gstatic.com,_site/_posts/README/index.html"
--ignore-files "/.+\/_posts\/README.md"
- --ignore-status-codes "0,403, 429, 503, 999"
+ --ignore-status-codes "0, 200, 403, 429, 503, 999"
diff --git a/_config.yml b/_config.yml
index d5a0a234..115b8415 100644
--- a/_config.yml
+++ b/_config.yml
@@ -245,6 +245,10 @@ whitelist:
- jekyll-redirect-from
collections:
+ packaging:
+ people: true
+ tutorials:
+ people: true
packages:
output: true
permalink: /:collection/:path/
diff --git a/_data/navigation.yml b/_data/navigation.yml
index 0bcd991a..44ed7076 100644
--- a/_data/navigation.yml
+++ b/_data/navigation.yml
@@ -9,15 +9,25 @@ main:
- title: "Community partners"
icon:
url: "/partners.html"
+ - title: "Accepted packages"
+ icon:
+ url: "/python-packages/"
- title: "Peer review guide"
url: "https://www.pyopensci.org/software-peer-review/"
icon: "fas fa-external-link-alt"
- - title: "Python package guide"
+ - title: "Python Packaging"
+ icon: "fas fa-fw fa-envelope-square"
+ url:
+ sub-nav:
+ - title: "Packaging resources"
+ icon:
+ url: "python-packaging-science.html"
+ - title: "Our packages"
+ icon:
+ url: "/python-packages/"
+ - title: "Package Guidebook"
url: "https://www.pyopensci.org/python-package-guide/"
icon: "fas fa-external-link-alt"
- - title: "Our packages"
- icon: "fas fa-fw fa-envelope-square"
- url: "/python-packages/index.html"
- title: "Blog"
url: "/blog/index.html"
- title: "Community"
diff --git a/_includes/feature_row b/_includes/feature_row
index bf75a7b8..b5c9b14a 100644
--- a/_includes/feature_row
+++ b/_includes/feature_row
@@ -14,7 +14,7 @@
{% endif %}
{% if f.image_path %}
-
{% if f.image_caption %}
{{ f.image_caption | markdownify | remove: "" | remove: "
" }}
diff --git a/_includes/tutorial-grid.html b/_includes/tutorial-grid.html
new file mode 100644
index 00000000..e8cfb614
--- /dev/null
+++ b/_includes/tutorial-grid.html
@@ -0,0 +1,27 @@
+
+
+
+
+
{{ atutorial.title }}
+
+ {% if atutorial.excerpt %}
+
+ {{ atutorial.excerpt }}
+
+ {% endif %}
+
+ {% if atutorial.subpages %}
+
+ {% for page in atutorial.subpages %}
+ -
+ {{ page.name }}
+
+ {% endfor %}
+
+
+ {% endif %}
+
+ {% if atutorial.link %}
+ {{ atutorial.btn_label }}
+ {% endif %}
+
diff --git a/_packaging/documentation.md b/_packaging/documentation.md
new file mode 100644
index 00000000..3c65c2c0
--- /dev/null
+++ b/_packaging/documentation.md
@@ -0,0 +1,16 @@
+---
+title: "Document your Python package"
+excerpt: "Learn about best practices for developing documentation for your Python package."
+learning_objectives:
+subpages:
+ - name: Documentation Overview
+ url: https://www.pyopensci.org/python-package-guide/documentation/index.html#
+ - name: Create your docs
+ url: https://www.pyopensci.org/python-package-guide/documentation/write-user-documentation/get-started.html
+ - name: Create package tutorials
+ url: https://www.pyopensci.org/python-package-guide/documentation/write-user-documentation/create-package-tutorials.html
+ - name: Document your code (API docs)
+ url: https://www.pyopensci.org/python-package-guide/documentation/write-user-documentation/document-your-code-api-docstrings.html
+
+url:
+---
diff --git a/_packaging/packaging.md b/_packaging/packaging.md
new file mode 100644
index 00000000..5b331741
--- /dev/null
+++ b/_packaging/packaging.md
@@ -0,0 +1,15 @@
+---
+title: "Create Python package structure"
+excerpt: "Learn about the best way to create your Python package."
+subpages:
+ - name: The structure of a Python package
+ url: https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-structure.html
+ - name: Add metadata - pyproject.toml file
+ url: https://www.pyopensci.org/python-package-guide/package-structure-code/pyproject-toml-python-package-metadata.html
+ - name: Declare package dependencies
+ url: https://www.pyopensci.org/python-package-guide/package-structure-code/declare-dependencies.html
+ - name: Get to know the ecosystem of Python packaging tools
+ url: https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-build-tools.html
+ - name: Complete package builds
+ url: https://www.pyopensci.org/python-package-guide/package-structure-code/complex-python-package-builds.html
+---
diff --git a/_packaging/publish-python-package.md b/_packaging/publish-python-package.md
new file mode 100644
index 00000000..e480ee5d
--- /dev/null
+++ b/_packaging/publish-python-package.md
@@ -0,0 +1,16 @@
+---
+title: "Publish your Python package"
+excerpt: "
+ Learn more about the publishing options for your Python package including publishing on PyPI and the conda-forge channel of conda."
+learning_objectives:
+subpages:
+ - name: Build your package for PyPI publication
+ url: https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html
+ - name: Publish to PyPI and Conda
+ url: https://www.pyopensci.org/python-package-guide/package-structure-code/publish-python-package-pypi-conda.html#
+ - name: Versioning your package
+ url: https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-versions.html
+ - name: Code style and format
+ url: https://www.pyopensci.org/python-package-guide/package-structure-code/code-style-linting-format.html
+url:
+---
diff --git a/_packaging/tests.md b/_packaging/tests.md
new file mode 100644
index 00000000..f8fe2a25
--- /dev/null
+++ b/_packaging/tests.md
@@ -0,0 +1,18 @@
+---
+title: "Python package tests"
+excerpt: "
+ Learn more about the importance of writing tests for your Python package and how you can setup infrastructure to run your tests both locally and on GitHub."
+learning_objectives:
+subpages:
+ - name: Introduction to writing tests
+ url: https://www.pyopensci.org/python-package-guide/tests/index.html
+ - name: Write tests for your Python package
+ url: https://www.pyopensci.org/python-package-guide/tests/write-tests.html
+ - name: Three types of types for your Python package
+ url: https://www.pyopensci.org/python-package-guide/tests/test-types.html
+ - name: Run tests locally
+ url: https://www.pyopensci.org/python-package-guide/tests/run-tests.html
+ - name: Run tests online using Continuous Integration
+ url: https://www.pyopensci.org/python-package-guide/tests/tests-ci.html
+url:
+---
diff --git a/_pages/home.md b/_pages/home.md
index d3777cce..d1e9fa4a 100644
--- a/_pages/home.md
+++ b/_pages/home.md
@@ -1,6 +1,7 @@
---
layout: splash
title: "Welcome to pyOpenSci"
+excerpt: "We support the scientific Python tools that drive open science through peer review, training and community building."
author_profile: false
published: true
site-map: true
diff --git a/_pages/packaging-resources.md b/_pages/packaging-resources.md
new file mode 100644
index 00000000..120d9042
--- /dev/null
+++ b/_pages/packaging-resources.md
@@ -0,0 +1,113 @@
+---
+layout: splash
+classes: flowing
+permalink: /python-packaging-science.html
+title: "Python packaging resources for scientists"
+excerpt: "We make the scientific Python package ecosystem easier to navigate through peer review and packaging resources."
+header:
+ overlay_image: images/header.jpg
+ overlay_filter: 0.8
+intro:
+ - excerpt: "There are many tools and approaches that can be used to create a Python package. We build resources that help you both understand the tool ecosystem and also learn how to create a Python package using modern best practices."
+peer-review:
+ - image_path: images/pyopensci-people-at-computer.jpg
+ alt: "A pencil sketch of a round table with people from different backgrounds sitting around it, working on laptops and also writing together."
+ excerpt: "We run an open peer review process for scientific Python software. Peer review helps maintainers improve the quality, usability and long-term maintainability of scientific software."
+ title: Raising the bar for scientific Python software"
+ url: https://www.pyopensci.org/about-peer-review/index.html
+ btn_label: Learn more and get involved with peer review today.
+ btn_class: btn--primary
+packaging-easier:
+ - image_path: images/pyopensci-working-together.png
+ alt: "A black and grey sketch of a group of people sitting at a desk in front of a monitor smiling."
+ title: "Get Involved: Help us improve our scientific Python packaging resources"
+ excerpt: "
+ We need your help! Our packaging content is community-created and reviewed through an open review process on GitHub. The more feedback that we get, the more useful our resources are to the community. Get involved by:
+
+ * Opening an issue about problems that you find in our guidebook
+
+ * Submitting a pull request that fixes a typo or mistake in the guide.
+
+ * Get credit for your contribution
+
+
+ All contributions are recognized both on our website and in the guidebook's citation.
+ "
+ url: https://github.com/pyOpenSci/python-package-guide/pulls
+ btn_label:
See what we're working on now
+ btn_class: btn--success
+community-created:
+ - image_path: images/pyopensci-people-working-together.png
+ image_size: 500px
+ alt: "A group of people working on a tetris like set of building blocks, trying to stack the blocks together. "
+ title: "Community-created Python Packaging Guide"
+ excerpt: "
+ Our packaging guide is a living document that will help you navigate the Python packaging ecosystem and learn about modern Python packaging best practices.
+
+ * Created & curated by the community
+
+ * Reviewed by beginner to expert level Pythonistas
+
+ * Accurate, modern & beginner-friendly
+
+
+ All contributions are recognized both on our website and in the guidebook's citation.
+ "
+toc: false
+---
+
+{% include feature_row id="intro" type="center" %}
+
+
+
+
+{% include feature_row id="community-created" type="right" %}
+
+
+### Scientific Python packaging guidebook sections
+
+
+{% for atutorial in site.packaging %}
+ {% include tutorial-grid.html %}
+{% endfor %}
+
+
+
+
+
+
+
+
+{% include div_purple_bottom.html %}
+
+
+
+
+## Beginner friendly Python packaging tutorials
+
+Beginner-friendly Python packaging tutorials that will take you through
+the full process of creating a Python package, following modern best
+practices.
+
+
+{% for atutorial in site.tutorials %}
+ {% include tutorial-grid.html %}
+{% endfor %}
+
+
+
+
+
+
+
+{% include div_purple_top.html %}
+
+
+
+{% include feature_row id="packaging-easier" type="left" %}
+
+
+
+
+
+{% include div_purple_bottom.html %}
diff --git a/_pages/tutorials.md b/_pages/tutorials.md
new file mode 100644
index 00000000..990e160e
--- /dev/null
+++ b/_pages/tutorials.md
@@ -0,0 +1,8 @@
+---
+title: Scientific Python tutorials
+layout: collection
+permalink: /tutorials/
+collection: portfolio
+entries_layout: grid
+classes: wide
+---
diff --git a/_sass/minimal-mistakes.scss b/_sass/minimal-mistakes.scss
index 324aa9f6..763ed1b8 100644
--- a/_sass/minimal-mistakes.scss
+++ b/_sass/minimal-mistakes.scss
@@ -50,3 +50,4 @@
@import "minimal-mistakes/pyos-twitter";
@import "minimal-mistakes/pyos-grid";
@import "minimal-mistakes/pyos-flowing-page";
+@import "minimal-mistakes/pyos-cards";
diff --git a/_sass/minimal-mistakes/_pyos-cards.scss b/_sass/minimal-mistakes/_pyos-cards.scss
new file mode 100644
index 00000000..e8d2ee95
--- /dev/null
+++ b/_sass/minimal-mistakes/_pyos-cards.scss
@@ -0,0 +1,79 @@
+.tutorial {
+ font-size: 1em;
+
+ & p.page__meta {
+ padding-top: 1.3em;
+ }
+}
+
+.card .page__meta {
+ font-size:5em!important;
+}
+
+.tutorial__container {
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); // Adjust the minmax values as needed
+ grid-gap: 20px;
+
+ // Ensure all cards have the height of the tallest card
+ align-items: stretch;
+
+ .card {
+ font-size: .8em;
+ display: flex;
+ flex-direction: column;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 8px;
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+
+ .excerpt {
+ font-size: 1em;
+ padding: 1em;
+ }
+ h4.title {
+ color: rgb(84, 38, 104)!important;
+ font-size: 1.3em;
+ margin: 0;
+ }
+ .title-block {
+ background-color: #F7F2E2;
+ display: flex;
+ height: auto;
+ padding: 1.2em;
+ border-bottom: #555 2px solid;
+ }
+
+ img {
+ width: 100%;
+ height: auto;
+ }
+
+ .content {
+ flex: 1;
+ }
+ ul li {
+ font-size: .9em;
+ margin: 0 0 .5em 0;
+ }
+ ul {
+ padding-right: .05em;
+ padding-bottom: .2em;
+ }
+ }
+
+}
+
+
+.btn--success{
+ color: #000!important;
+}
+
+
+.subsection {
+ padding: 0 2em;
+
+ h3 {
+ padding-left: 0.5em;
+ }
+}
diff --git a/_sass/minimal-mistakes/_pyos-dropdown.scss b/_sass/minimal-mistakes/_pyos-dropdown.scss
index 7a793d67..278b71fe 100644
--- a/_sass/minimal-mistakes/_pyos-dropdown.scss
+++ b/_sass/minimal-mistakes/_pyos-dropdown.scss
@@ -28,6 +28,7 @@
margin-right: auto;
display: block;
max-height: 3rem!important;
+ box-shadow: none!important;
}
diff --git a/_sass/minimal-mistakes/_pyos-grid.scss b/_sass/minimal-mistakes/_pyos-grid.scss
index f22d4a91..064b46e8 100644
--- a/_sass/minimal-mistakes/_pyos-grid.scss
+++ b/_sass/minimal-mistakes/_pyos-grid.scss
@@ -1,4 +1,8 @@
-
+.clearfix::after {
+ content: "";
+ display: table;
+ clear: both;
+}
/* Create & style a 3x3 grid wrapper */
.grid {
diff --git a/_sass/minimal-mistakes/_variables.scss b/_sass/minimal-mistakes/_variables.scss
index c7ac0299..a1358cbd 100644
--- a/_sass/minimal-mistakes/_variables.scss
+++ b/_sass/minimal-mistakes/_variables.scss
@@ -89,7 +89,7 @@ $form-background-color: $lighter-gray !default;
$footer-background-color: $lighter-gray !default;
$primary-color: #6f777d !default;
-$success-color: #3fa63f !default;
+$success-color: #81c0aa !default;
$warning-color: #d67f05 !default;
$danger-color: #ee5f5b !default;
$info-color: #320e5b !default;
diff --git a/_tutorials/1-what-is-package.md b/_tutorials/1-what-is-package.md
new file mode 100644
index 00000000..b0e3957b
--- /dev/null
+++ b/_tutorials/1-what-is-package.md
@@ -0,0 +1,12 @@
+---
+title: "What is a Python package"
+excerpt: "
+ Learn about what a Python package is and the basic components that make up a Python package."
+learning_objectives:
+ - "Understand what a Python package is"
+ - "Be able to list the 5 core components of a Python package"
+ - "Be able to explain the difference between generalizable code and code that supports a specific scientific application"
+link: https://www.pyopensci.org/python-package-guide/tutorials/intro.html
+btn_label: View Tutorial
+btn_class: btn--success btn--large
+---
diff --git a/_tutorials/2-make-code-installable.md b/_tutorials/2-make-code-installable.md
new file mode 100644
index 00000000..5e75bfbc
--- /dev/null
+++ b/_tutorials/2-make-code-installable.md
@@ -0,0 +1,10 @@
+---
+title: "Make your Python code installable"
+excerpt: "
+ Learn how to create the most basic version of a Python package which can then be installed into a Python environment."
+learning_objectives:
+ - "Understand what a Python package is"
+link: https://www.pyopensci.org/python-package-guide/tutorials/1-installable-code.html
+btn_label: View Tutorial
+btn_class: btn--success btn--large
+---
diff --git a/_tutorials/3-publish-to-pypi.md b/_tutorials/3-publish-to-pypi.md
new file mode 100644
index 00000000..534666a5
--- /dev/null
+++ b/_tutorials/3-publish-to-pypi.md
@@ -0,0 +1,12 @@
+---
+title: "Publish your Python package to PyPI"
+excerpt: "
+ Learn how to publish your Python package to test.PyPI.org and to PyPI.org."
+learning_objectives:
+ - "Build your package’s distributions"
+ - "Setup an account on test PyPI (the process is similar for the real PyPI)"
+ - "Publish your package to test PyPI"
+link: https://www.pyopensci.org/python-package-guide/tutorials/publish-pypi.html
+btn_label: View Tutorial
+btn_class: btn--success btn--large
+---
diff --git a/images/pyopensci-people-working-together.png b/images/pyopensci-people-working-together.png
new file mode 100644
index 00000000..8f485728
Binary files /dev/null and b/images/pyopensci-people-working-together.png differ
diff --git a/images/pyopensci-working-together.png b/images/pyopensci-working-together.png
new file mode 100644
index 00000000..90be3559
Binary files /dev/null and b/images/pyopensci-working-together.png differ