<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://www.pyopensci.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.pyopensci.org/" rel="alternate" type="text/html" /><updated>2026-04-03T01:09:05+00:00</updated><id>https://www.pyopensci.org/feed.xml</id><title type="html">pyOpenSci</title><subtitle>pyOpenSci&apos;s Website</subtitle><author><name>pyOpenSci</name></author><entry><title type="html">Ship It: Research Software Development in the GenAI Era</title><link href="https://www.pyopensci.org/events/shipit-python-package-gen-ai-april-2026.html" rel="alternate" type="text/html" title="Ship It: Research Software Development in the GenAI Era" /><published>2026-03-03T00:00:00+00:00</published><updated>2026-03-03T00:00:00+00:00</updated><id>https://www.pyopensci.org/events/course-python-packaging-gen-ai</id><content type="html" xml:base="https://www.pyopensci.org/events/shipit-python-package-gen-ai-april-2026.html"><![CDATA[<div class="feature__wrapper">

  
    <div class="feature__item--center">
      <div class="archive__item">
        
        

        <div class="archive__item-body">


          
            <div class="archive__item-excerpt">
              <p>Transform your code into something others can easily install, use, and trust.</p>

            </div>
          

          
        </div>
      </div>
    </div>
  

</div>

<div class="content noimage">

  <div class="notice notice--success">
    <h2 id="everything-you-need-to-know">Everything you need to know</h2>

    <ul>
      <li><strong>When:</strong> Friday, 10 April 2026 – Thursday, 23 April 2026</li>
      <li><strong>Where:</strong> Online asynchronous course with live office hours</li>
    </ul>

    <h3 id="cost">Cost</h3>

    <p>This course was paid for by the Stanford University Open Source
Program Office (OSPO) and is available to both Stanford OSPO
researchers and other OSPOs in the CURIOSS network.</p>

    <p>Learn more about our partnership with Stanford in this short video:
<a href="https://www.youtube.com/watch?v=9HDAZJS_Wck">Ship It with Stanford OSPO</a></p>

  </div>

  <h2 id="about-the-course">About the course</h2>
  <p>Learn directly from leaders in the open source space. Featuring hands-on
activities, expert interviews with Python core developers and scientific Python
maintainers, and live office hours where you can get help and ask questions,
this 10-day asynchronous course empowers university researchers and
practitioners to reliably build and share critical tools.</p>

  <p>Developed by pyOpenSci in partnership with the Stanford Open Source Program
Office (OSPO), this program delivers a trusted, expert-led curriculum that
guides you through the lifecycle of a modern Python package. You will evolve a
working script into a tested, documented, and automated package published on
PyPI.</p>

  <p>By participating in this course, you’re also joining a vibrant open source
ecosystem. Expect to work with today’s industry-standard
tools—including uv,
Hatch, pytest, and Sphinx—while exploring open-source workflows and learning
how to use Generative AI critically, thoughtfully, and responsibly.</p>

  <h2 id="what-youll-learn">What you’ll learn</h2>

  <ul>
    <li>Structure a Python package from scratch.</li>
    <li>Configure your package using pyproject.toml.</li>
    <li>Build and publish your package to (test) PyPI.</li>
    <li>Write and run different types of tests using pytest.</li>
    <li>Automate your development workflows with task runners.</li>
    <li>Create the core documentation files every package needs.</li>
    <li>Use AI tools responsibly in your development workflow.</li>
  </ul>

  <p>This course is part of pyOpenSci’s <strong>Ship It</strong> curriculum — designed for
researchers, scientists, and developers who want to build sustainable,
production-ready open source software.</p>

  <h2 id="who-this-course-is-for">Who this course is for</h2>

  <p>This course is designed for:</p>

  <ul>
    <li><strong>Researchers, scientists, and postdocs</strong> who write Python code and want to
share it</li>
    <li><strong>University faculty, staff, and students</strong> looking to teach or adopt modern
Python packaging practices</li>
    <li><strong>Developers</strong> who are new to open source packaging and want a structured,
guided path</li>
  </ul>

  <p><em>No prior packaging experience is required.</em> If you are comfortable with Python
programming and can write a Python function, then you’re ready for this course.</p>

  <h2 id="what-makes-this-course-different">What makes this course different</h2>

  <p>pyOpenSci’s unique advantage is its community. You’re not just watching videos;
you’re learning alongside — and from — the people who maintain Python’s
packaging ecosystem.</p>

  <p>The course is delivered in a flexible, async format designed for busy
researchers: each day you’ll discover 10–15 minutes of video content, and
then you’ll complete a short bite-sized activity. Use the weekend to catch up
if you fall behind.</p>

</div>

<div class="pyos-section purple">
<div class="content noimage">

    <h2 id="course-schedule-at-a-glance">Course Schedule at a Glance</h2>

    <h3 id="week-0-setup">Week 0: Setup</h3>

    <p>The week before the course begins is focused on setup. You can complete the
course either using GitHub Codespaces or locally on your computer.</p>

    <h3 id="week-1-foundation--structure">Week 1: Foundation &amp; Structure</h3>

    <ul>
      <li><i class="fas fa-folder-tree" style="color: #999;"></i> Day 1 — Create and
run your package</li>
      <li><i class="fas fa-folder-tree" style="color: #999;"></i> Day 2 — Metadata and
dependencies: the pyproject.toml file</li>
      <li><i class="fas fa-hammer" style="color: #999;"></i> Day 3 — Build and publish
your package</li>
      <li><i class="fas fa-vial" style="color: #999;"></i> Day 4 — Introduction to
testing</li>
      <li><i class="fas fa-comments" style="color: #999;"></i> Day 5 — Live office
hours: show up, ask questions, get help.</li>
    </ul>

    <h3 id="week-2-task-runners-genai--documentation">Week 2: Task runners, GenAI &amp; Documentation</h3>

    <ul>
      <li><i class="fas fa-sync-alt" style="color: #999;"></i> Day 6 — Automate your
workflows: task runners and environments</li>
      <li><i class="fas fa-robot" style="color: #999;"></i> Day 7 — GenAI to support
your workflows</li>
      <li><i class="fas fa-users" style="color: #999;"></i> Day 8 — Documentation that
matters most to build your community and maintainer team</li>
      <li><i class="fas fa-flag-checkered" style="color: #999;"></i> Day 9 — Office
hours &amp; wrap up</li>
    </ul>

  </div>
</div>

<div class="content noimage">

  <h3 id="what-youll-walk-away-with">What you’ll walk away with</h3>

  <ul>
    <li><strong>Complete Package Template:</strong> Ready-to-use project structure</li>
    <li><strong>Automation Workflows:</strong> GitHub Actions for testing and publishing</li>
    <li><strong>Quality Checklists:</strong> Never miss important packaging steps</li>
    <li><strong>Publishing Guide:</strong> Step-by-step instructions for secure PyPI deployment
using GitHub Actions</li>
  </ul>

  <h3 id="pre-requisites">Pre-requisites</h3>

  <p>To successfully follow along in this workshop, you should:</p>

  <ul>
    <li>Know how to write Python code</li>
    <li>Understand how to write and use Python functions</li>
    <li>Have a free GitHub account. You can work using GitHub Codespaces during this
workshop, and setting up this account is free if you don’t already have one.</li>
    <li>Have internet access to access the course materials and tools.</li>
  </ul>

  <h3 id="your-instructors--helpers">Your instructors &amp; helpers</h3>

  <div class="event-instructors">
  <div class="grid event-instructors__grid">
    
    <div class="cards people-card event-instructor">
      <div class="people-card__content">
        <div class="person_img event-instructor__avatar">
          <img src="https://github.com/lwasser.png" alt="GitHub profile photo of Leah Wasser" width="400" height="400" loading="lazy" />
        </div>
        <div class="event-instructor__text">
          <h4 class="person_name">
            <a href="https://github.com/lwasser" rel="noopener noreferrer">
              Leah Wasser
            </a>
            <a href="https://github.com/lwasser" class="event-instructor__github-link" rel="noopener noreferrer" aria-label="Leah Wasser on GitHub">
            </a>
          </h4>
          <p class="event-instructor__bio">The Executive Director and Founder of pyOpenSci, Leah brings over 20 years of experience teaching technical data science topics in the scientific space. pyOpenSci has worked with hundreds of scientific Python package maintainers and has helped over 50 packages improve their structure and distribution through our peer review process.</p>
        </div>
      </div>
    </div>
    
    <div class="cards people-card event-instructor">
      <div class="people-card__content">
        <div class="person_img event-instructor__avatar">
          <img src="https://github.com/ucodery.png" alt="GitHub profile photo of Jeremiah Paige" width="400" height="400" loading="lazy" />
        </div>
        <div class="event-instructor__text">
          <h4 class="person_name">
            <a href="https://github.com/ucodery" rel="noopener noreferrer">
              Jeremiah Paige
            </a>
            <a href="https://github.com/ucodery" class="event-instructor__github-link" rel="noopener noreferrer" aria-label="Jeremiah Paige on GitHub">
            </a>
          </h4>
          <p class="event-instructor__bio">An open source author, contributor, and speaker, specifically working with Python for over 12 years. He is also a software engineer in the secure supply chain industry during work hours.</p>
        </div>
      </div>
    </div>
    
    <div class="cards people-card event-instructor">
      <div class="people-card__content">
        <div class="person_img event-instructor__avatar">
          <img src="https://github.com/inessaPawson.png" alt="GitHub profile photo of Inessa Pawson" width="400" height="400" loading="lazy" />
        </div>
        <div class="event-instructor__text">
          <h4 class="person_name">
            <a href="https://github.com/inessaPawson" rel="noopener noreferrer">
              Inessa Pawson
            </a>
            <a href="https://github.com/inessaPawson" class="event-instructor__github-link" rel="noopener noreferrer" aria-label="Inessa Pawson on GitHub">
            </a>
          </h4>
          <p class="event-instructor__bio">Bio coming soon.</p>
        </div>
      </div>
    </div>
    
  </div>
</div>

</div>]]></content><author><name>pyOpenSci</name></author><category term="events" /><summary type="html"><![CDATA[A trusted 10-day hands-on asynchronous cohort-based course developed by pyOpenSci for Stanford University and the CURIOSS network.]]></summary></entry><entry><title type="html">Building Resilience: pyOpenSci in 2026</title><link href="https://www.pyopensci.org/blog/2026-building-resilience-together.html" rel="alternate" type="text/html" title="Building Resilience: pyOpenSci in 2026" /><published>2026-01-22T00:00:00+00:00</published><updated>2026-01-22T00:00:00+00:00</updated><id>https://www.pyopensci.org/blog/building-resilience-2026</id><content type="html" xml:base="https://www.pyopensci.org/blog/2026-building-resilience-together.html"><![CDATA[<h2 id="the-world-has-changed">The world has changed</h2>

<p>I’m not going to sugarcoat it—2025 was hard.</p>

<p>Watching organizations like the <a href="https://pyfound.blogspot.com/2025/10/NSF-funding-statement.html">Python Software Foundation turn down million-dollar National Science Foundation (NSF) grants</a>
because DEIA work was no longer supported made something painfully clear: the funding landscape that has grounded so many of us is no longer reliable.</p>

<p>At the same time, Generative AI fundamentally changed how open source work happens. Maintainers found themselves reviewing more code than ever—much of it machine-generated—while navigating ethical questions about authorship and responsibility they didn’t sign up to solve on their own.</p>

<p>For many of us, the ground felt unstable—not just months out, but sometimes day to day.</p>

<p>And yet, something important happened.</p>

<p>Instead of pulling back, <strong>the pyOpenSci community leaned in</strong>. People showed up
for each other. They reviewed, mentored, taught, organized, and adapted—often
quietly, often while navigating uncertainty of their own.</p>

<figure>
  <picture>
    <source srcset="/images/blog/2025/pyos-sprint-group.webp" type="image/webp" />
    <img src="/images/blog/2025/pyos-sprint-group.png" alt="pyOpenSci community members working together" />
  </picture>
  <figcaption>The pyOpenSci community showing up for each other. SciPy 2025 beginner-friendly sprint.</figcaption>
</figure>

<h2 id="the-moment-that-changed-everything">The moment that changed everything</h2>

<p>One moment from 2025 keeps coming back to me: our sprint at SciPy.</p>

<p>We had record attendance at that sprint compared to previous years! The large group self-organized. Tables moved. Whiteboards filled with ad-hoc lessons
on Git and GitHub. Experienced contributors mentored newcomers.</p>

<p>I think about the colleague who sat down, saw the size of the sprint group,
and asked—”how can I help?”. He spent the day working with other sprinters,
helping them make their first contributions to open source.</p>

<p>This is one example of how baking structure and strong value systems into a community can yield incredible returns. The <strong>community members show up for each other because that is just how pyOpenSci operates</strong>. It’s who we are, and it’s magical.</p>

<figure>
  <picture>
    <source srcset="/images/blog/2025/tracey-james-scipy-2025.webp" type="image/webp" />
    <img src="/images/blog/2025/tracey-james-scipy-2025.png" alt="Tracey and James at the SciPy 2025 sprint" />
  </picture>
  <figcaption>Tracey and James at the SciPy 2025 sprint, where community
  members came together to support each other and make their first
  contributions to open source.</figcaption>
</figure>

<blockquote class="highlight-quote magenta">
  <p>Community members show up for each other because that is how pyOpenSci operates. It’s who we are and it’s magical.</p>
</blockquote>

<figure>
  <picture>
    <source srcset="/images/blog/2025/bof-group-inessa.webp" type="image/webp" />
    <img src="/images/blog/2025/bof-group-inessa.png" alt="SciPy 2025 sprint participants working in small groups" />
  </picture>
  <figcaption>SciPy 2025 community session participants discussing challenges in scientific Open Source.</figcaption>
</figure>

<p>That day felt like the manifestation of a blueprint. It showed what happens when you create the
right environment and empower a community to help each other. That model—
shared ownership, peer learning, mutual support—changed how I think about
building sustainable infrastructure and community.</p>

<p>Resilience is about building inclusive spaces for people to both engage, learn, and support each other.</p>

<h2 id="what-were-building-in-2026">What we’re building in 2026</h2>

<h3 id="shifting-how-we-think-about-sustainability">Shifting how we think about sustainability</h3>

<p>One of the clearest lessons from 2025 is that a grant-dependent model alone
can’t support the community-centered infrastructure pyOpenSci is
building. Grants will always matter, but they can’t be the only pillar
holding us up.</p>

<p>As we move into 2026, pyOpenSci is shifting toward a more
diversified sustainability plan–one that centers on training, sponsorship, and
community support. And as always, our focus will remain on human-centered growth and development, which is particularly critical in our current moment of Generative AI-driven rapid change.</p>

<p>Value-alignment will continue to be critical as we make this shift.</p>

<h3 id="training-that-connects-people-and-builds-responsible-practice">Training that connects people and builds responsible practice</h3>

<p>In 2026, we’re investing in a new type of training: programs that bring
researchers from around the world together to learn both software development
best practices <em>and</em> the responsible use of Generative AI in scientific and
open source workflows. The training will be held asynchronously to reduce barriers
to participation and increase accessibility. And it will feature incredible leaders in the open source community in an effort to connect learners to the <strong>real heart of Open Source–people</strong>.</p>

<p>We’re piloting this new training format through our <a href="https://www.pyopensci.org/events/pyopensci-stanford-create-python-package-workshop.html">partnership with
Stanford’s Open Source Program Office (OSPO)</a>. Building on the momentum, we’ll expand this model to other university OSPOs, leveraging the strong connections within the CURIOSS network and building an organizational membership program that supports researchers at scale. While our courses will initially be designed for OSPO researchers they will be valuable to anyone looking to develop the open source and responsible us of Generative
AI skills that are in high demand in today’s tech-driven job market.</p>

<p>Generative AI can support open source workflows, but it can’t fully replace
the thought, design, and vision that only a human can implement. It also can’t replace
mentorship, care, and compassion—human parts of the tech world that both fuel the
open source ecosystem and are also straining the fragile social web that supports it. Our training will continue to emphasize foundational open source skills, critical thinking and shared open source norms and workflows.</p>

<p>Our goal is to create learning spaces that reduce isolation, build
confidence, connect learners to the humans that drive open source, and strengthen the
communities behind scientific software.</p>

<figure>
  <picture>
    <source srcset="/images/blog/2025/scipy-workshop-teaching.webp" type="image/webp" />
    <img src="/images/blog/2025/scipy-workshop-teaching.png" alt="Teaching a pyOpenSci workshop at SciPy 2025" />
  </picture>
  <figcaption>Teaching a pyOpenSci workshop at SciPy 2025, focused on Python
  packaging and open source best practices.</figcaption>
</figure>

<h2 id="the-people-who-make-this-possible">The people who make this possible</h2>

<p>None of what we learned in 2025—or what we’re building toward in 2026—
happened in isolation.</p>

<p>I’m deeply grateful to our 2025 Executive Council, <strong><a href="https://github.com/kcranston">Karen Cranston</a>
and <a href="https://github.com/aprilmj">April Johnson</a></strong>, for their steady guidance
and support as we navigated a challenging year. They encouraged me to embrace
sustainable leadership and supported me as I developed new programs to ensure
our long-term sustainability.</p>

<p>Our Editors-in-Chief—<strong><a href="https://github.com/coatless">James Balamuta</a>,
<a href="https://github.com/eliotwrobson">Eliot Robson</a>, and <a href="https://github.com/yeelauren">Lauren Yee</a></strong>—
led the peer review process through a period of rapid change, navigating
AI-fueled submissions while keeping quality and care at the center.
<strong><a href="https://github.com/crhea93">Carter Rhea</a></strong> stepped up as an editor
numerous times, supporting volunteers who were overburdened and leading one
of our largest reviews—Astropy—which was just accepted in early 2026.</p>

<figure>
  <picture>
    <source srcset="/images/blog/2025/maintainers-summit-dan.webp" type="image/webp" />
    <img src="/images/blog/2025/maintainers-summit-dan.png" alt="PyCon US 2025 Maintainers Summit" />
  </picture>
  <figcaption>PyCon US 2025 Maintainers Summit, where we created space for
  those who keep scientific Python running.</figcaption>
</figure>

<p>Members of our Advisory Council—<strong><a href="https://github.com/willingc">Carol Willing</a>,
<a href="https://github.com/InessaPawson">Inessa Pawson</a>, and <a href="https://github.com/cmillion">Chase Million</a></strong>—
helped me think through sustainability, partnerships, and long-term direction
with wisdom and generosity.</p>

<figure>
  <picture>
    <source srcset="/images/blog/2025/carol-willing-micromentor.webp" type="image/webp" />
    <img src="/images/blog/2025/carol-willing-micromentor.png" alt="Carol Willing presenting on micromentoring" />
  </picture>
  <figcaption>Carol Willing from our Advisory Council presenting on
  micromentoring at the Maintainers Summit, co-organized by pyOpenSci at PYCON US 2025.</figcaption>
</figure>

<p><strong>And to the many community members who contributed through reviews, workshops,
sprints, writing, mentoring, and quiet acts of support—thank you. This
organization exists because you choose to show up.</strong></p>

<h2 id="community-matters-most">Community matters most</h2>

<p>When things are uncertain, community infrastructure matters most.
It’s how people find support that institutions can’t provide. It’s how
knowledge gets shared when traditional collaboration pathways break down.
It’s how we take care of each other.</p>

<p>That SciPy sprint showed me what’s possible. When you create spaces where
people can show up, learn together, and support each other—when you do that
consistently—the community becomes the infrastructure.</p>

<p>This is how we build resilience. This is how we help make the world better. <strong>Together.</strong></p>]]></content><author><name>pyOpenSci</name></author><category term="blog-post" /><category term="community" /><summary type="html"><![CDATA[pyOpenSci learned a lot about resilience in 2025. As we navigate generative AIs impact on scientific open source and shifting funding landscapes, pyOpenSci is building resilience through training, sponsorship, and community-centered leadership. Learn more about our plan.]]></summary></entry><entry><title type="html">CyNetDiff: A Python Library for Accelerated Implementation of Network Diffusion Models</title><link href="https://www.pyopensci.org/blog/cynetdiff.html" rel="alternate" type="text/html" title="CyNetDiff: A Python Library for Accelerated Implementation of Network Diffusion Models" /><published>2026-01-12T00:00:00+00:00</published><updated>2026-01-12T00:00:00+00:00</updated><id>https://www.pyopensci.org/blog/cynetdiff</id><content type="html" xml:base="https://www.pyopensci.org/blog/cynetdiff.html"><![CDATA[<p>Network diffusion models study how information and epidemics spread over social networks, and have garnered increasing interest in recent years. Two of the most widely used models are the <strong>independent cascade (IC)</strong> and <strong>linear threshold (LT) models</strong>. These models simulate spread through a network by starting with a set of seed nodes that are designated as “active”, and all other nodes are “inactive”. Then, in each iteration, some inactive nodes become active, and the iterations continue until no other nodes can be activated.</p>

<p>Many tasks related to these models, particularly influence maximization, require running simulations on large graphs many times, which can be computationally expensive. There has been significant prior work on reducing the number of simulations needed for these tasks, demonstrating the importance of an efficient implementation.</p>

<p>While researchers often prefer high-level languages like Python for their flexibility and quick development, these computationally intensive tasks are better suited for low-level, compiled languages. To bridge this gap, we’ve developed <strong>CyNetDiff</strong>, a Python library that uses components written in Cython to provide the performance of a compiled language with the flexibility of a high-level language.</p>

<hr />

<h2 id="package-features">Package Features</h2>

<p>The performance-critical parts of CyNetDiff are written in <strong>Cython</strong>, a language extension that compiles to C++ while remaining callable from Python. To take advantage of Cython’s speed, the library uses the <strong>compressed sparse row (CSR) format</strong> in an array-based representation. This data structure has low memory overhead and allows for efficient, repeated traversals, making it ideal for diffusion process simulations.</p>

<p>The implementation also uses a <strong>BFS-based traversal algorithm</strong> that only explores the out-neighbors of nodes activated in the previous iteration. This means the work done is proportional to the number of edges connected to activated nodes, which can be much smaller than the size of the entire graph, especially when there are few seed nodes.</p>

<p>The package also includes utility functions to easily convert well-established NetworkX graphs into the CSR format, allowing for seamless integration into existing research pipelines.</p>

<hr />

<h2 id="development">Development</h2>

<p>The development and review process for CyNetDiff was lengthy, partly due to the complex packaging requirements for Cython. After trying many different tools, we eventually settled on PDM and Meson as the packaging tools for this project. Our greatest difficulty in converting from prior tools was understanding the configuration files necessary for building and releasing our package.</p>

<h3 id="use-of-generative-ai">Use of Generative AI</h3>

<p>During development, we used Google Gemini to help interpret and understand Meson’s configuration syntax for our project’s build system. The AI-generated configuration suggestions were carefully reviewed, tested, and adapted to our specific project needs before implementation. All code was validated through our test suite and the pyOpenSci review process.</p>

<p>pyOpenSci encourages transparency about AI tool use in package development. To learn more about our approach to generative AI in open source software, see our <a href="/blog/generative-ai-peer-review-policy.html">generative AI peer review policy</a>.</p>

<hr />

<h2 id="citing">Citing</h2>

<p>This library is joint work with Dhemath Reddy and <a href="https://ece.illinois.edu/about/directory/faculty/aumrawal">Abhishek K. Umrawal</a>.
This post is adapted from our <a href="https://dl.acm.org/doi/abs/10.14778/3685800.3685887">VLDB paper</a>, which
should be used for citations.</p>]]></content><author><name>Eliot W. Robson</name></author><category term="blog-post" /><category term="cynetdiff" /><category term="network-diffusion" /><category term="pyos-accepted" /><summary type="html"><![CDATA[CyNetDiff is a Python package for accelerating network diffusion simulations, recently accepted into the pyOpenSci ecosystem.]]></summary></entry><entry><title type="html">Navigating LLMs in Open Source: pyOpenSci’s New Peer Review Policy</title><link href="https://www.pyopensci.org/blog/generative-ai-peer-review-policy.html" rel="alternate" type="text/html" title="Navigating LLMs in Open Source: pyOpenSci’s New Peer Review Policy" /><published>2025-11-18T00:00:00+00:00</published><updated>2025-11-18T00:00:00+00:00</updated><id>https://www.pyopensci.org/blog/generative-ai-peer-review</id><content type="html" xml:base="https://www.pyopensci.org/blog/generative-ai-peer-review-policy.html"><![CDATA[<p>authors: Leah Wasser, Jed Brown, Carter Rhea, Ellie Abrahams, Carol Willing, Stefan van der Walt, Eliot Robson</p>

<h2 id="generative-ai-meets-scientific-open-source">Generative AI meets scientific open source</h2>

<p>Some developers believe that using Generative AI products increases
efficiency. However, in scientific open source, speed isn’t
everything—transparency, quality, and community trust are just as
important as understanding the environmental impacts of using large
language models in our everyday work. Similarly, ethical questions
arise when tools may benefit some communities while harming others.</p>

<h2 id="why-we-need-guidelines">Why we need guidelines</h2>

<p>At pyOpenSci, <a href="https://github.com/pyOpenSci/software-peer-review/pull/344">we’ve drafted a new policy</a> for our peer review process to set clear expectations for disclosing the use of LLMs in scientific open-source software.</p>

<p>Our goal is transparency and fostering reproducible research. For scientific rigor, we want maintainers to <strong>disclose when and how they’ve used LLMs</strong> so editors and reviewers can fairly and efficiently evaluate submissions. Further, we want to avoid burdening our volunteer editorial and reviewer team with being the initial reviewers of generated code.</p>

<p>This is the beginning of our work to ensure that Gen AI tools are not
creating undue burden on our volunteer software review team. Humans
cannot perform in depth reviews at the rate at which these tools can
create large volumes of code.</p>

<h2 id="a-complex-topic-benefits-and-concerns">A complex topic: benefits and concerns</h2>

<p>LLMs are perceived as helping developers:</p>

<ul>
  <li>Explain complex codebases</li>
  <li>Generate unit tests and docstrings</li>
  <li>Simplify language barriers for participants in open source around
the world</li>
  <li>Speed up everyday workflows</li>
</ul>

<p>Some contributors perceive these products as making open source more
accessible. And for some, maybe they do. However, LLMs also present
unprecedented social and environmental challenges that we have to
critically evaluate.</p>

<h3 id="incorrectness-of-llms-and-misleading-time-benefits">Incorrectness of LLMs and misleading time benefits</h3>

<p>Although it is commonly stated that LLMs help improve the productivity
of high-level developers, recent scientific explorations of this
hypothesis <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">indicate the
contrary</a>.
What’s more is that the responses of LLMs for complex coding tasks
<a href="https://arxiv.org/html/2407.06153v1">tend to be
incorrect</a> and/or overly
verbose/inefficient. It is crucial that, if you use an LLM to help
produce code, you should independently evaluate code correctness and
efficiency.</p>

<h3 id="environmental-impacts">Environmental impacts</h3>

<p>Training and running LLMs <a href="https://www.unep.org/news-and-stories/story/ai-has-environmental-problem-heres-what-world-can-do-about">requires massive energy
consumption</a>,
raising sustainability concerns that sit uncomfortably alongside much
of the global-scale scientific research that our community supports.</p>

<h3 id="impact-on-learning">Impact on learning</h3>

<p>Heavy reliance on LLMs risks producing developers who can prompt, but
not debug, maintain, or secure production code. This risk undermines
long-term project sustainability and growth. In the long run, it will
make it <a href="https://knowledge.wharton.upenn.edu/article/without-guardrails-generative-ai-can-harm-education/">harder for young developers to learn how to code and
troubleshoot
independently</a>.</p>

<blockquote>
  <p>We’re really worried that if humans don’t learn, if they start using these tools as a crutch and rely on it, then they won’t actually build those fundamental skills to be able to use these tools effectively in the future. <em>Hamsa Bastani</em></p>
</blockquote>

<h3 id="ethics-and-inclusion">Ethics and inclusion</h3>

<p>LLM outputs can reflect and amplify bias in training data. In
documentation and tutorials, that bias can harm the very communities
we want to support.</p>

<h2 id="our-approach-transparency-and-disclosure">Our approach: transparency and disclosure</h2>

<p>We acknowledge that social and ethical norms, as well as concerns
about environmental and societal impacts, vary widely across the
community. We are not here to judge anyone who uses or doesn’t use
LLMs. Our focus centers on supporting informed decision-making and
consent regarding LLM use in the pyOpenSci software submission,
review, and editorial process.</p>

<p>Our community’s expectation for maintainers submitting a package is simple: <strong>be open and disclose any Generative AI use in your package</strong> when you submit it to our open software review process.</p>

<ul>
  <li>Disclose LLM use in your README and at the top of relevant modules.</li>
  <li>Describe how the Generative AI tools were used in your package’s development.</li>
  <li>Be clear about what human review you performed on Generative AI
outputs before submitting the package to our open peer review
process.</li>
</ul>

<p>Transparency helps reviewers understand context, trace decisions, and
focus their time where it matters most. We do not want the burden of
reviewing code generated from a model, placed on a volunteer. That
effort belongs to the maintainer who ran the model that generated that
code.</p>

<h3 id="human-oversight">Human oversight</h3>

<p>LLM-assisted code must be <strong>reviewed, edited, and tested by humans</strong>
before submission.</p>

<ul>
  <li>Run your tests and confirm the correctness of the code that you submitted.</li>
  <li>Check for security and quality issues.</li>
  <li>Ensure style, readability, and concise docstrings. Depending on the
AI tool, generated docstrings can sometimes be overly verbose without
adding meaningful understanding.</li>
  <li>Explain your review process in your software submission to pyOpenSci.</li>
</ul>

<p>Please <strong>don’t offload vetting of generative AI content to volunteer
reviewers</strong>. Arrive with human-reviewed code that you understand,
have tested, and can maintain. As the submitter, you are accountable
for your submission: you take responsibility for the quality,
correctness, and provenance of all code in your package, regardless of
how it was generated.</p>

<h3 id="watch-out-for-licensing-issues">Watch out for licensing issues.</h3>

<p>LLMs are trained on large amounts of open source code, and most of
that code has licenses that require attribution (including permissive
licenses like MIT and BSD-3). The problem? LLMs sometimes produce
near-exact copies of that training data, but without any attribution
or copyright notices. <strong>LLM output does not comply with the license
requirements of the input code, even when the input is permissively
licensed</strong>, because it fails to provide the required attribution.</p>

<p>Not all code carries the same licensing risk. The risk varies
depending on what you’re generating.</p>

<p>Risk of license infringement is <strong>lower for routine tasks</strong> like
refactoring existing code, test suite improvements, creating
boilerplate code, simple utility functions, and docstring generation.
These tasks are more common, often use widely documented patterns,
and are not as likely to be substantially similar to copyrighted
training data.</p>

<p>Tasks that are <strong>higher risk</strong> include:</p>

<ul>
  <li>Algorithm implementations</li>
  <li>Developing workflows for complex data structures</li>
  <li>Domain-specific logic that is potentially already published or
copyrighted</li>
</ul>

<p>For high-risk content (e.g., algorithm implementations), you need to
understand the algorithm to vet its correctness, ensure the approach
is not already published and copyrighted, vet its performance, and
evaluate edge cases. If you understand it well enough to review it
thoroughly, you can often implement it yourself. In these cases, use
LLMs as learning aids—ask questions, study approaches, then write
your own implementation.</p>

<p>Why this matters:</p>

<ul>
  <li>LLM-generated code may be <em>substantially similar</em> to copyrighted
training data; sometimes it is identical. Copyright law focuses on
how similar your content is compared to the original.</li>
  <li>You can’t trace what content the LLM learned from (the black box
problem); this makes due diligence impossible on your part. You
might accidentally commit plagiarism or copyright infringement by
using LLM output in your code even if you modify it.</li>
  <li>License conflicts occur because of both items above. Read on…</li>
</ul>

<p>When licenses clash, it gets particularly messy. Even when licenses
are compatible (e.g., MIT-licensed training data and MIT-licensed
output), you still have a violation because attribution is missing.
With incompatible licenses (say, an LLM outputs GPL code and your
package uses MIT), you can’t just add attribution to fix it—you’d
technically have to delete everything and rewrite it from scratch
using clean-room methods to comply with licensing requirements.</p>

<p>The reality of all of this is that you can’t eliminate this risk of
license infringement or plagiarism with current LLM technology. But
you can be more thoughtful about how you use the technology.</p>

<h3 id="what-you-can-do-now">What you can do now</h3>

<p>Consider the following:</p>

<ul>
  <li>Assess the licensing risk based on what you’re generating: routine
refactoring carries lower risk than implementing novel algorithms or
domain-specific logic.</li>
  <li>Be aware that when you directly use content from an LLM, there will
be inherent license conflicts and attribution issues.</li>
  <li><strong>Use LLMs as learning tools</strong>: Ask questions, review outputs
critically, then write your own implementation based on
understanding. Often the outputs of LLMs are messy or inefficient.
Use them to learn, not to copy. This is especially important for
high-risk content like algorithms.</li>
  <li>Understand and transform code returned from an LLM: Don’t paste LLM
outputs directly. Review, edit, and ensure you fully understand what
you’re using. You can ask the LLM questions to better understand its
outputs. This approach also helps you learn, which addresses the
education concerns that we raised earlier.</li>
  <li>Consider <a href="https://en.wikipedia.org/wiki/Clean-room_design">clean-room
techniques</a>: Have
one person review LLM suggestions for approach; have another person
implement from that high-level description.</li>
  <li><strong>Document your process</strong>: If you plan to submit a Python package
for pyOpenSci review, we will ask you about your use of LLMs in your
work. Document the use of LLMs in your project’s README file and in
any modules where LLM outputs have been applied. Confirm that it has
been reviewed by a human prior to submitting it to us, or any other
volunteer-led peer review process.</li>
</ul>

<p>You can’t control what’s in training data, but you can be thoughtful
about how you use these tools.</p>

<div class="notice">
  <p>Examples of how these licensing issues are impacting and stressing our
legal systems:</p>

  <ul>
    <li><a href="https://githubcopilotlitigation.com/case-updates.html">GitHub Copilot litigation</a></li>
    <li><a href="https://arxiv.org/abs/2505.12546">Litigation around text from LLMs</a></li>
    <li><a href="https://dwheeler.com/essays/floss-license-slide.html">incompatible licenses</a></li>
  </ul>
</div>

<h3 id="review-for-bias">Review for bias</h3>

<p>Inclusion is part of quality. Treat AI-generated text with the same
care as code.
Given the known biases that can manifest in Generative AI-derived text:</p>

<ul>
  <li>Review AI-generated text for stereotypes or exclusionary language.</li>
  <li>Prefer plain, inclusive language.</li>
  <li>Invite feedback and review from diverse contributors.</li>
</ul>

<h2 id="things-to-consider-in-your-development-workflows">Things to consider in your development workflows</h2>

<p>If you are a maintainer or a contributor, some of the above can apply
to your development and contribution process, too. Similar to how
peer review systems are being taxed, rapid, AI-assisted pull requests
and issues can also overwhelm maintainers too. To combat this:</p>

<ul>
  <li>If you are using generative AI tools in your daily workflows, keep each task small, focused, and well-defined. This is particularly important if you are using agent mode. This will produce smaller changes to your codebase that
will be easier to thoughtfully review and evaluate.</li>
  <li>Open an issue first before submitting a pull request to a repository that you don’t own to ensure it’s
welcome and needed</li>
  <li>Keep your pull requests small with clear scopes.</li>
  <li>If you use LLMs, test and edit all of the output before you submit a
pull request or issue.</li>
  <li>Flag AI-assisted sections of any contribution so maintainers know
where to look closely.</li>
  <li>Be responsive to feedback from maintainers, especially when
submitting code that is AI-generated.</li>
</ul>

<h2 id="where-we-go-from-here">Where we go from here</h2>

<p>A lot of thought and consideration has gone into the development of
<a href="https://www.pyopensci.org/software-peer-review/our-process/policies.html#policy-for-use-of-generative-ai-llms">pyOpenSci’s Generative AI
policies</a>.</p>

<p>We will continue to suggest best practices for embracing modern
technologies while critically evaluating their realities and the
impacts they have on our ecosystem. These guidelines help us maintain
the quality and integrity of packages in our peer review process while
protecting the volunteer community that makes open peer review
possible. As AI tools evolve, so will our approach—but transparency,
human oversight, and community trust will always remain at the center
of our work.</p>

<h2 id="join-the-conversation">Join the conversation</h2>

<p>This policy is just the beginning. As AI continues to evolve, so will
our practices. We invite you to:</p>

<p>👉 <a href="https://github.com/pyOpenSci/software-peer-review/pull/344">Read the full draft policy and discussion</a>
👉 Share your feedback and help us shape how the scientific Python
  community approaches Generative AI in open source.</p>

<p>The conversation is only starting, and your voice matters.</p>]]></content><author><name>pyOpenSci</name></author><category term="blog-post" /><category term="community" /><summary type="html"><![CDATA[Generative AI products are reducing the effort and skill necessary to generate large amounts of code. In some cases, this strains volunteer peer review programs like ours. Learn about pyOpenSci's approach to developing a Generative AI policy for our software peer review program.]]></summary></entry><entry><title type="html">Why We Choose What We Choose</title><link href="https://www.pyopensci.org/blog/how-we-choose-python-tools.html" rel="alternate" type="text/html" title="Why We Choose What We Choose" /><published>2025-10-02T00:00:00+00:00</published><updated>2025-10-02T00:00:00+00:00</updated><id>https://www.pyopensci.org/blog/why-we-choose-what-we-choose</id><content type="html" xml:base="https://www.pyopensci.org/blog/how-we-choose-python-tools.html"><![CDATA[<p>A primary focus at pyOpenSci, one of our petals of support, is selecting packaging tools that work well for our users and work well together. We use our curated selection of tooling in our packaging guide, in our online tutorials, and in our trainings. We don’t require the use of any of our selected tools to submit a package to our peer review program but we will suggest them if the package authors ask for help trying to clean up or adopt new workflows.</p>

<p>The members of pyOpenSci spend a great deal of time selecting these tools, debating tradeoffs, test-driving them in new situations, looking at new community trends, and listening to feedback from events we run. But up until now we haven’t typically posted in the open either how or why we have come to the decisions we did. This post outlines, in not very strict terms, the rubric we use when selecting a project that we want to recommend. We focus on a beginner-leaning happy path for packaging workflows. In other words, what works really well for new projects that don’t have a lot, if any, non-conventional requirements to share their code.</p>

<p>Our rubric comes from five categories, approximately ordered as follows:</p>

<h2 id="tools-that-are-free-and-open">Tools that are free and open</h2>

<p>We love open software! It’s even in our name. We are always looking to nurture and support open source software, even beyond packaging projects. It should come as no surprise, then, that we only choose tools in our packaging guide that are themselves open source.</p>

<p>We don’t just appreciate open source, though, we also look for projects that are open contribution – that do most of their maintenance, stewardship, and designing in public. This means there is a public bug tracker where new issues are accepted from anyone, and fixes for those bugs are also accepted from non-maintainers. It may also mean that new feature ideas are accepted from the community, or even given a period of public comment. Contributions from everyone, including members and non-members, should be respected as the exchange of free ideas. Project authors should not seek to take exclusive ownership of the collaborative efforts of the community they are a part of. This means that contributors of any level and for any purpose of the project should be recognized publicly. It also means that the project is not asking for the exclusive rights to those contributors’ ideas (through overly restrictive Contributor License Agreements).</p>

<p>Our commitment to open software goes beyond just projects that choose to host their code and bugs in a public manner. We also value Free Software; both as in Beer and as in Freedom. Permissive open source software empowers its users to take control of their tools and fix, extend, secure, and adapt code for the purposes that will best fit their own needs. Choosing projects that do not require a financial exchange in order to be used ensures that we can recommend our choices to anyone no matter their situation or location.</p>

<h2 id="tools-that-are-inclusive">Tools that are inclusive</h2>

<p>Inclusivity is very important to us; it is a critical component of tooling projects we select. Programming, including packaging of that software, is a skill that should be available to everyone.</p>

<p>The tools we advocate for should not seek to limit their use through actions such as: adoption of a restrictive license; poor, missing, obfuscated, or expert-only documentation; charging for use of the tool or any process related to its successful usage; not supporting mainstream operating systems. The projects behind the tools should welcome constructive bug reports from users of all levels, and ideally also welcome contributions from all their users.</p>

<p>There are some signals that we look for to tell if the project is inclusive. We want all of our recommended tools to have a code of conduct for their project. The project should also have a contributors guide that is easy to find. Labeling issues or running sprints aimed at fostering commits from new contributors is also a great indicator.</p>

<p>Projects that manage to attract and maintain a broad base of contributors will be viewed more positively. We value projects that strive to do this not only in code, but also in documentation, engagement with the bug tracker, external write-ups and tutorials, and so forth.</p>

<h2 id="tools-that-implement-open-standards">Tools that implement open standards</h2>

<p>It is very important to us that the tools and processes we stand behind support the full set of community standards.</p>

<p>For Python, this typically means conforming to <a href="https://peps.python.org">Python Enhancement Proposals</a>, but may also involve other standard bodies such as <a href="https://scientific-python.org/specs/">Scientific Python Ecosystem Coordination</a>.</p>

<p>Supporting community standards demonstrates that the project respects the community it is working within and is serious about interoperability with other tools and processes. When done right, these tools empower their users to move this workflow, or any of its inputs or outputs, to another standards-compliant tool or process with little to no friction. It also makes it easier to teach since many of the concepts, as well as in some cases entire parts of project data, are tool-agnostic and can feel “familiar” even to those that have never used the tool before. There is also likely to be more documentation developed through forums, blogs, workshops, and other online platforms, because they apply to more than one tool.</p>

<p>It can be a lot of work for tool maintainers to keep up-to-date with changes in standardization, especially in a large and eclectic community such as Python. While we understand that it can take time to implement new features imposed from outside of a project, we also know that a selectively-implemented standard is often worse than no standard.</p>

<h2 id="tools-that-are-well-supported">Tools that are well supported</h2>

<p>We would like to only recommend projects that we can confidently say are healthy, correct, and here to stay. A well-maintained project is a somewhat subjective metric that is hard to pin down, but whenever possible we would apply our <a href="https://www.pyopensci.org/software-peer-review/how-to/author-guide.html#does-your-package-meet-packaging-requirements">same standard</a> for Peer Reviews of Scientific Software.</p>

<p>Authors and maintainers should respond to open issues and continue to make fixes to the project. We do not have any expectation or metric of response time, open bug count, time to close commit requests, security artifacts, or any other level of effort requirement; only that the project is alive and healthy to the degree that is appropriate for its function. We also strongly prefer projects that have a team of core maintainers as opposed to an individual maintainer.</p>

<h2 id="tools-that-reduce-user-choices">Tools that reduce user choices</h2>

<p>Python packaging suffers, perhaps infamously, from <a href="https://www.pyopensci.org/blog/python-packaging-friends-dont-let-friends-package-alone.html#just-say-no-to-tmo">Too Many Options</a>. We would like to make as many pragmatic choices as we can on behalf of the learner. Better yet is to make choices that will eliminate further choices and complexity later on in the process; this can help learners from getting stuck in runaway analysis paralysis.</p>

<p>This means that these tools should implement sensible defaults for any configurable value. Like with Python, they should make the simple easy and the difficult possible.</p>

<p>It also means that we will generally select one tool when two or more could do the same job. So long as the one tool fits our other criteria it doesn’t have to “win” at every single task it is capable of doing when compared against a plethora of other tools.</p>]]></content><author><name>Jeremiah Paige</name></author><category term="blog-post" /><category term="community" /><summary type="html"><![CDATA[In selecting one workflow to package a Python project, pyOpenSci chooses between a lot of code tools. These choices often come after months of exploration and debate. Find out what motivates us to make the decisions that we do.]]></summary></entry><entry><title type="html">From Surviving to Thriving: A Convening to Reclaim and Sustain Open Science Communities</title><link href="https://www.pyopensci.org/blog/pyopensci-surviving-to-thriving.html" rel="alternate" type="text/html" title="From Surviving to Thriving: A Convening to Reclaim and Sustain Open Science Communities" /><published>2025-09-14T00:00:00+00:00</published><updated>2025-09-14T00:00:00+00:00</updated><id>https://www.pyopensci.org/blog/pyopensci-surviving-to-thriving</id><content type="html" xml:base="https://www.pyopensci.org/blog/pyopensci-surviving-to-thriving.html"><![CDATA[<p><em>Authors: Kari L. Jordan, Erin Becker, Daniela Saderi, Vanessa Fairhurst, Patricia Herterich, Noam Ross, Yanina Bellini Saibene, Leah Wasser, Yo Yehudi</em></p>

<figure>
  <picture>
  <source srcset="/images/blog/2025/waterfall-flikr.webp" type="image/webp" />
  <img src="/images/blog/2025/waterfall-flikr.jpg" alt="A photograph of a waterfall cascading down rocks in a rich green forest setting" style="width: 80%;" />
  </picture>
    <figcaption>"Black Forest: waterfall" by *rboed* is licensed under CC BY 2.0. To view a copy of this license, visit https://creativecommons.org/licenses/by/2.0/?ref=openverse.</figcaption>
</figure>

<p>Open science has transformed how research is conducted, shared, and reused. Yet the organisations at the heart of this transformation are often left vulnerable, underfunded, and disconnected from one another. To move from simply surviving to truly thriving, five leading open science organisations -- <a href="https://carpentries.org/">The Carpentries</a>, <a href="https://we-are-ols.org/">OLS</a>, <a href="https://ropensci.org/">rOpenSci</a>, <a href="https://www.pyopensci.org/">pyOpenSci</a>, and <a href="https://prereview.org/">PREreview</a>) -- are convening to chart a collective path forward. We are so grateful to The Navigation Fund for supporting this work, and invite our communities to review the <a href="https://commons.datacite.org/doi.org/10.71707/qttn-3j47">full proposal</a> online.</p>

<h2 id="why-this-convening-matters">Why This Convening Matters</h2>

<p>Our work has reshaped scientific culture by modeling inclusive, participatory, and transparent practices. But despite the global reach and impact of our communities, we face shared challenges:</p>

<ul>
  <li>Chronic underfunding that undermines our ability to plan and grow.</li>
  <li>Fragmentation across networks, which weakens collective visibility and coordination.</li>
  <li>Unsustainable engagement models that over-rely on volunteers without adequate support systems.</li>
</ul>

<p>Like a single thread, each of our organisations is fragile alone; together, we can weave a stronger, more resilient open science fabric.</p>

<h2 id="current-gaps">Current Gaps</h2>

<p>Open science is built on collaboration and transparency, but too often the organisations building this infrastructure operate in silos. The result is uneven visibility, duplicated efforts, and missed opportunities to align strategies. Community-driven organisations like ours face distinct challenges compared with technical infrastructure projects: recruiting contributors is not enough if the structures and motivation to sustain their engagement are missing.</p>

<p>This fragmentation is not just an internal problem; it’s a loss for the broader research ecosystem that depends on our work.</p>

<h2 id="our-approach">Our Approach</h2>

<p>We are planning a strategic, in-person convening of leadership from our five organisations. This gathering will focus on:</p>

<ul>
  <li>Shared financial sustainability: Developing collective, value-aligned models for funding and resource generation.</li>
  <li>Collaborative engagement strategies: Designing systems that strengthen and connect our communities across roles, regions, and lived experiences.</li>
  <li>Equity-centered design: Ensuring accessibility, usability, and meaningful participation for all involved.</li>
</ul>

<p>Facilitated by <a href="https://wildlyopen.com/">Wildly Open</a>, we are excited to explore and better understand what is (and isn’t) working, and then build durable models for collaboration and sustainability.</p>

<h2 id="what-we-aim-to-deliver">What We Aim to Deliver</h2>

<ul>
  <li>A coordinated sustainability strategy that reflects the shared values of our organisations.</li>
  <li>A funder-facing pitch to mobilise resources in support of this strategy.</li>
  <li>Stronger ties among our organisations that extend beyond the convening, creating lasting impact.</li>
</ul>

<h2 id="the-bigger-picture">The Bigger Picture</h2>

<p>This convening is not an isolated event. It’s the first step in scaling a movement that reimagines how values-driven open science organisations can grow together, share resources, and strengthen the ecosystem we collectively serve. By working together, we can ensure that the future of open science is not only innovative, but also equitable, sustainable, and resilient.</p>

<div class="notice">

  <h2 id="connect-with-us">Connect with us!</h2>

  <p>There are lots of ways to get involved if you are interested!</p>

  <ul>
    <li>If you read through our lessons and want to suggest changes, open an issue in our <a href="https://github.com/pyOpenSci/lessons">lessons repository here</a>.</li>
    <li><a href="https://docs.google.com/forms/u/6/d/e/1FAIpQLSeVf-L_1-jYeO84OvEE8UemEoCmIiD5ddP_aO8S90vb7srADQ/viewform?usp=send_form">Volunteer to be a reviewer for pyOpenSci’s software review process</a>.</li>
    <li><a href="https://www.pyopensci.org/software-peer-review/how-to/author-guide.html#submit-your-package-for-peer-review">Submit a scientific Python package to pyOpenSci for peer review.</a></li>
    <li><a href="https://give.communityin.org/pyopensci_2024?ref=ab_0sHhtifYvgR0sHhtifYvgR">Donate to pyOpenSci</a> to support scholarships for future training events and the development of new learning content.</li>
    <li>Check out our <a href="https://www.pyopensci.org/volunteer.html">volunteer page</a> for other ways to get involved.</li>
  </ul>

  <p>You can also:</p>

  <ul>
    <li>Keep an eye on our <a href="https://www.pyopensci.org/events.html">events page</a> for upcoming training events.</li>
  </ul>

  <p>Follow us on social platforms:</p>

  <ul>
    <li><a href="https://fosstodon.org/@pyopensci">Mastodon</a></li>
    <li><a href="https://bsky.app/profile/pyopensci.org">Bluesky</a></li>
    <li><a href="https://www.linkedin.com/company/pyopensci/">LinkedIn</a></li>
    <li><a href="https://github.com/pyOpenSci">GitHub</a></li>
  </ul>

  <p>If you are on LinkedIn, check out and <a href="https://www.linkedin.com/newsletters/7179551305344933888/?displayConfirmation=true">subscribe to our newsletter</a>, too.</p>

</div>]]></content><author><name>pyOpenSci</name></author><category term="blog-post" /><category term="community" /><summary type="html"><![CDATA[Building resilience in open science starts with collaboration. Learn how pyOpenSci is partnering with the Carpentries, Prereview, Open Life Sciences, and rOpenSci to reinvision how open communities can work together to share the future of open science in uncertain times.]]></summary></entry><entry><title type="html">What’s New in pyOpenSci: September Updates + Community Shoutouts</title><link href="https://www.pyopensci.org/blog/pyopensci-september-2025-updates.html" rel="alternate" type="text/html" title="What’s New in pyOpenSci: September Updates + Community Shoutouts" /><published>2025-09-11T00:00:00+00:00</published><updated>2025-09-11T00:00:00+00:00</updated><id>https://www.pyopensci.org/blog/pyopensci-september-news-2025</id><content type="html" xml:base="https://www.pyopensci.org/blog/pyopensci-september-2025-updates.html"><![CDATA[<p>The summer was full of connection, collaboration, and momentum in the pyOpenSci community. Whether you joined us at <a href="https://scipy.org/">SciPy</a>, submitted a package for review, or just lurked, we’re so grateful you’re here!</p>

<p>Here’s what’s been happening 👇</p>

<hr />

<h2 id="-community-shoutouts"><strong>💬 Community Shoutouts</strong></h2>

<p><strong>Welcome, Philip Narteh!</strong></p>

<p>We’re thrilled to welcome <a href="https://github.com/Phinart98"><strong>Philip Narteh</strong></a> as pyOpenSci’s very first <strong>Open Source Infrastructure Intern</strong>, supported by <a href="https://quansight.com/">Quansight</a>, <a href="https://github.com/melissawm">Melissa Mendonça</a>, and <a href="https://github.com/trallard">Tania Allard</a>. Philip will be helping us migrate our website to <a href="https://www.djangoproject.com/">Django</a>, bringing valuable experience in accessibility within the Django ecosystem. We’re so excited to have you here, Philip!</p>

<p><strong>Contributor milestones</strong></p>

<p>We’ve also had some meaningful leadership transitions happen.</p>

<ul>
  <li><a href="https://github.com/tracykteal"><strong>Tracy Teal</strong></a> completed her term as our founding Executive Council Chair after three transformative years. The Executive Council is the leadership body that guides pyOpenSci’s strategy, governance, and long-term sustainability. You can think of it as the group that helps us make big-picture decisions and ensures our work stays aligned with our mission. <a href="https://www.pyopensci.org/handbook/governance/executive-council.html">Learn more about the Executive Council.</a></li>
  <li><a href="https://github.com/kcranston"><strong>Karen Cranston</strong></a> has stepped in as our new Executive Council Chair, and <strong>April Johnson</strong> has joined as a new Council member.</li>
</ul>

<p>These transitions highlight pyOpenSci’s growing maturity and sustainability as an organization.</p>

<p>We also want to celebrate our editorial team:</p>

<ul>
  <li><a href="https://github.com/eliotwrobson"><strong>Eliot Robson</strong></a> transitioned into the Editor-in-Chief role for our peer review process.</li>
  <li><a href="https://github.com/cmarmo"><strong>Chiara Marmo</strong></a> and <a href="https://github.com/isabelizimm"><strong>Isabel Zimmerman</strong></a> wrapped up their terms as Editors after years of thoughtful reviews and community care. Thank you both!</li>
</ul>

<hr />

<h2 id="-scipy-2025-highlights"><strong>🎤 SciPy 2025 Highlights</strong></h2>

<p>Over 60 people joined our Birds of a Feather (BoF) session to discuss challenges in research software and what community-driven peer review can do to help. It was one of our most energizing community sessions yet!</p>

<p>We also:</p>

<ul>
  <li>Kicked off the conference with our packaging workshop, introducing folks to our user-friendly template and modern tools like Hatch and UV.</li>
  <li>Welcomed many first-time contributors at our community sprint, with <strong>over 30 PRs opened in one day</strong>!</li>
  <li>Shared lightning talks, saw Pixi in action, and even got a <strong>SciPy Song shoutout</strong>.</li>
</ul>

<p>Big thanks to everyone who contributed to our SciPy presence—especially Jonny Saunders, Avik Basu, Jeremiah Paige, Inessa Pawson, Carol Willing, Tetsuo Koyama, and many others who made our workshop and sprints welcoming and impactful.</p>

<p>📖Read: <a href="https://www.pyopensci.org/blog/pyopensci-at-scipy-2025.html">Highlights from SciPy 2025: Building Community, Code, and Culture</a></p>

<hr />

<h2 id="-peer-review-updates"><strong>🔍 Peer Review Updates</strong></h2>

<p>We’re excited to see continued momentum in our software review process! Right now, <strong>13 packages are actively under review,</strong> and another <strong>10 are in prereview</strong> (the early stage before formal review begins). You can explore the <a href="https://www.pyopensci.org/metrics/peer-review/current-review-status.html">live review status board</a> anytime to follow along.</p>

<p>🎉 Recently accepted packages include:</p>

<ul>
  <li><a href="https://github.com/pudeIko/piva"><strong>PIVA</strong></a> (August 4, 2025) — A visualization and analysis toolkit for experimental data from <a href="https://arpes.stanford.edu/research/tool-development/angle-resolved-photoemission-spectroscopy">Angle-Resolved Photoemission Spectroscopy (ARPES)</a>.</li>
  <li><a href="https://github.com/eliotwrobson/CyNetDiff"><strong>CyNetDiff</strong></a> (August 22, 2025) — A performance-focused library for simulating network diffusion processes using <a href="https://cython.org/">Cython</a>.</li>
</ul>

<p>A big congratulations to the maintainers of these projects, and a thank you to the reviewers and editors who supported them through the process.</p>

<p>📦 Interested in submitting your own Python package?</p>

<p>👉 <a href="https://www.pyopensci.org/python-package-guide/">Read our guide and submit here</a></p>

<hr />

<h2 id="-community-learning--behind-the-scenes"><strong>🧠 Community Learning + Behind-the-Scenes</strong></h2>

<p><strong>Event Recap: <a href="https://www.pyopensci.org/events/pyopensci-stanford-ospo-peer-review.html">Improving Research Software through Peer Review</a></strong></p>

<p>On August 7, we partnered with Stanford’s OSPO for a virtual session exploring how pyOpenSci’s peer review model strengthens research software and supports contributor recognition.</p>

<p><strong>New blog updates</strong></p>

<p>If our blog posts feel a little more structured, community-centered, and friendly lately—say hi to our new <strong>Communications and Community Lead, Mandy Moore!</strong> She’s been working behind the scenes on everything from SEO-friendly image tags to blog polish to social media storytelling.</p>

<p>Bonus: She even learned a little HTML for it. 😉</p>

<p>📖Read: <a href="https://www.pyopensci.org/blog/mandy-moore-communications-lead.html">Meet Mandy Moore, pyOpenSci’s new Communications and Community Lead!</a></p>

<hr />

<h2 id="-upcoming-events">📅 Upcoming Events</h2>

<p><strong>October 2, 2025 – <a href="https://www.pyopensci.org/events/pyopensci-stanford-create-python-package-workshop.html">Create a Python Package: A Hands-On Workshop</a></strong></p>

<p>This workshop is being held for the Stanford Open Source Program office community through our new membership model. We are excited to host another live online workshop on Spatial Chat, where we’ll walk you through building your first Python package using Hatch, UV, and other modern tools—complete with a ready-to-use GitHub Codespace. (9 AM PT / 10 AM MT)</p>

<p><strong>November 6, 2025 – <a href="https://www.pyopensci.org/events/python-packaging-workshop-november-2025.html">Create a Python Package: A Hands-On Workshop</a></strong></p>

<p>It’s not too late to grab a seat in our second Python packaging workshop. Python packaging at your fingertips!</p>

<p>Here, we’ll walk you through building your first Python package using Hatch, UV, and other modern tools—complete with a ready-to-use GitHub Codespace using a custom pyOpenSci template. (9 AM PT / 10 AM MT)</p>

<p>✨ More workshops and events are always in the works—stay tuned via our <a href="https://www.pyopensci.org/events.html">events page</a> for the latest updates.</p>

<hr />

<h2 id="️-how-you-can-get-involved"><strong>🛠️ How You Can Get Involved</strong></h2>

<ul>
  <li>Volunteer with pyOpenSci – from peer review to outreach, we welcome contributors of all kinds.</li>
  <li>Follow us – <a href="https://www.linkedin.com/company/pyopensci/">LinkedIn</a>, <a href="https://fosstodon.org/@pyOpenSci">Mastodon</a>, <a href="https://bsky.app/profile/pyopensci.org">Bluesky</a>.</li>
</ul>

<hr />

<h2 id="-on-our-radar"><strong>👀 On Our Radar</strong></h2>

<ul>
  <li>We’re working on new policies around the role of generative AI in peer review and open source. It’s a challenging and timely topic, and we’ve opened a <a href="https://github.com/pyOpenSci/software-peer-review/issues/331">GitHub discussion</a> to gather thoughts from the community.</li>
  <li>We’re also developing policies to support review of packages already reviewed by our partner journal, JOSS.</li>
  <li>Curious about next-gen Python packaging? Check out <a href="https://github.com/astral-sh/uv">uv</a>, <a href="https://pixi.sh/">Pixi</a>, and <a href="https://hatch.pypa.io/latest/">Hatch</a>.</li>
  <li>Keep an eye out for more blogs and contributor spotlights—we’ll be highlighting both technical insights and the people who make this community thrive.</li>
</ul>

<hr />

<p>✨ Let’s keep building together.</p>

<p>Until next time,</p>

<p>The pyOpenSci Team 💛</p>

<div class="notice">

  <h2 id="connect-with-us">Connect with us!</h2>

  <p>There are lots of ways to get involved if you are interested!</p>

  <ul>
    <li>If you read through our lessons and want to suggest changes, open an issue in our <a href="https://github.com/pyOpenSci/lessons">lessons repository here</a>.</li>
    <li><a href="https://docs.google.com/forms/u/6/d/e/1FAIpQLSeVf-L_1-jYeO84OvEE8UemEoCmIiD5ddP_aO8S90vb7srADQ/viewform?usp=send_form">Volunteer to be a reviewer for pyOpenSci’s software review process</a>.</li>
    <li><a href="https://www.pyopensci.org/software-peer-review/how-to/author-guide.html#submit-your-package-for-peer-review">Submit a scientific Python package to pyOpenSci for peer review.</a></li>
    <li><a href="https://give.communityin.org/pyopensci_2024?ref=ab_0sHhtifYvgR0sHhtifYvgR">Donate to pyOpenSci</a> to support scholarships for future training events and the development of new learning content.</li>
    <li>Check out our <a href="https://www.pyopensci.org/volunteer.html">volunteer page</a> for other ways to get involved.</li>
  </ul>

  <p>You can also:</p>

  <ul>
    <li>Keep an eye on our <a href="https://www.pyopensci.org/events.html">events page</a> for upcoming training events.</li>
  </ul>

  <p>Follow us on social platforms:</p>

  <ul>
    <li><a href="https://fosstodon.org/@pyopensci">Mastodon</a></li>
    <li><a href="https://bsky.app/profile/pyopensci.org">Bluesky</a></li>
    <li><a href="https://www.linkedin.com/company/pyopensci/">LinkedIn</a></li>
    <li><a href="https://github.com/pyOpenSci">GitHub</a></li>
  </ul>

  <p>If you are on LinkedIn, check out and <a href="https://www.linkedin.com/newsletters/7179551305344933888/?displayConfirmation=true">subscribe to our newsletter</a>, too.</p>

</div>]]></content><author><name>pyOpenSci</name></author><category term="blog-post" /><category term="community" /><summary type="html"><![CDATA[This summer brought incredible momentum to pyOpenSci—from 60+ attendees at our SciPy session to 13 packages actively under review and exciting new leadership transitions. Join our November Python packaging workshop or explore how you can get involved in peer review.]]></summary></entry><entry><title type="html">From Zero to Python Package: A 2-Hour Python Packaging Workshop</title><link href="https://www.pyopensci.org/events/python-packaging-workshop-november-2025.html" rel="alternate" type="text/html" title="From Zero to Python Package: A 2-Hour Python Packaging Workshop" /><published>2025-09-08T00:00:00+00:00</published><updated>2025-09-08T00:00:00+00:00</updated><id>https://www.pyopensci.org/events/workshop-create-python-package-2hour</id><content type="html" xml:base="https://www.pyopensci.org/events/python-packaging-workshop-november-2025.html"><![CDATA[<h2 id="everything-that-you-need-to-know">Everything that you need to know</h2>

<ul>
  <li><strong>When:</strong> Thursday, 6 November 2025 10:00 AM Mountain Time - 12:15 PM Mountain Time</li>
  <li><strong>Where:</strong> Interactive webinar with live demos</li>
</ul>

<h3 id="cost">Cost</h3>

<p>Prices are in US Dollars. This workshop not only provides you with expert training, but it also supports the work that pyOpenSci does to support scientific open source.</p>

<table>
  <tbody>
    <tr>
      <td>Ticket Type</td>
      <td>Early Bird (Before 5 November 2025 )</td>
      <td>Regular</td>
    </tr>
    <tr>
      <td>Regular</td>
      <td>$149</td>
      <td>$199</td>
    </tr>
    <tr>
      <td>Student</td>
      <td>$45</td>
      <td>$85</td>
    </tr>
    <tr>
      <td>Partner Community (Astropy, PyHC, OpenAstronomy, Pangeo)</td>
      <td>$85</td>
      <td>$85</td>
    </tr>
    <tr>
      <td>Partner Community Student (Astropy, PyHC, OpenAstronomy, Pangeo)</td>
      <td>$40</td>
      <td>$40</td>
    </tr>
  </tbody>
</table>

<p class="btn btn--success"><i class="fa-regular fa-circle-right"></i> <a href="https://www.eventbrite.com/e/pyopensci-zero-to-pure-python-package-in-minutes-tickets-1677115350159">Register Now on Eventbrite</a></p>

<div class="notice">
  <p>Scholarships are available to individuals who have been affected by job loss and funding cuts and who don’t have the resources to attend our training. We will ensure that scholarship recipients represent a diverse range of voices, backgrounds, and experiences. Scholarships are also available to Undergraduate and Graduate level students. Scholarships will reduce the cost of the workshop to 20$ (Students) or 45$ (continuing education, academics and others). We offer a limited number of scholarships. Please be sure to explain why this workshop will benefit your work in Science and the greater open science community when you apply.</p>

  <p><a href="https://forms.gle/tnV3tj13cChQXLEH7">To apply for a scholarship, please fill out this Google form.</a></p>
</div>

<p>Your research code deserves to reach more people. In this hands-on workshop, you’ll learn how to transform your Python scripts into professional packages that others can easily install, use, and contribute to. Walk away with a complete packaging workflow and the confidence to share your work with the world.</p>

<p>This workshop is part of pyOpenSci’s commitment to building better research software through accessible packaging practices. Whether you’re sharing analysis tools with colleagues or building the next great Python library, you’ll gain practical skills to package like a pro.</p>

<h3 id="workshop-structure">Workshop Structure</h3>

<h4 id="part-1-modern-python-packaging-foundations-30-minutes">Part 1: Modern Python packaging foundations (30 minutes)</h4>

<ul>
  <li><i class="fas fa-folder-tree" style="color: #999;"></i> <strong>Package Structure:</strong> Set up your project the right way from day one</li>
  <li><i class="fas fa-file-alt" style="color: #999;"></i> <strong>Essential Files Walkthrough:</strong> pyproject.toml, README, and what actually matters</li>
  <li><i class="fas fa-tools" style="color: #999;"></i> <strong>Tool Decision Framework:</strong> Navigate the packaging ecosystem with confidence</li>
</ul>

<h4 id="part-2-build-your-python-package-30-minutes">Part 2: Build your Python package (30 minutes)</h4>

<ul>
  <li><i class="fas fa-hammer" style="color: #999;"></i> <strong>Live Build Demo:</strong> See packaging in action with real code</li>
  <li><i class="fas fa-vial" style="color: #999;"></i> <strong>Setup Tests:</strong> Make sure your package works everywhere and as new pull requests come in</li>
  <li><i class="fas fa-check-circle" style="color: #999;"></i> <strong>Quality Checklist:</strong> Professional packaging standards made simple</li>
</ul>

<h4 id="-break-10-minutes"><i class="fa-solid fa-mug-hot" style="color: #81c0aa;"></i> Break (10 minutes)</h4>

<h4 id="part-3-publish-and-share-your-python-package-30-minutes">Part 3: Publish and share your Python package (30 minutes)</h4>

<ul>
  <li><i class="fas fa-upload" style="color: #999;"></i> <strong>PyPI Publishing:</strong> Get your package on the Python Package Index</li>
  <li><i class="fas fa-shield-alt" style="color: #999;"></i> <strong>Security Best Practices:</strong> Protect your package and users when you are publishing using Trusted Publishing.</li>
  <li><i class="fas fa-sync-alt" style="color: #999;"></i> <strong>Automation Setup:</strong> Never manually release your package again; instead use GitHub actions with trusted publishing.</li>
</ul>

<h4 id="part-4-documentation-for-a-healthy-project-20-minutes">Part 4: Documentation for a healthy project (20 minutes)</h4>

<ul>
  <li><i class="fas fa-users" style="color: #999;"></i> <strong>What docs matter most?:</strong> A brief overview of documentation to make it easier to onboard both contributors and new maintainers to your project.</li>
</ul>

<h4 id="wrap-up-questions-20-minutes">Wrap up: Questions (20 Minutes)</h4>

<ul>
  <li><i class="fas fa-question-circle" style="color: #999;"></i> <strong>Q&amp;A:</strong> Get your questions answered</li>
</ul>

<h3 id="why-attend">Why attend</h3>

<ul>
  <li><i class="fa-solid fa-rocket" style="color: #999;"></i> Learn modern packaging practices used by successful Python projects</li>
  <li><i class="fa-solid fa-tools" style="color: #999;"></i> Get production-ready templates and automation you can use immediately</li>
  <li><i class="fa-solid fa-shield-alt" style="color: #999;"></i> Understand publishing security best practices from day one</li>
  <li><i class="fa-solid fa-eye" style="color: #999;"></i> See live demos of the complete packaging workflow</li>
  <li><i class="fa-solid fa-graduation-cap" style="color: #999;"></i> Learn from pyOpenSci’s experience reviewing dozens of packages</li>
</ul>

<h3 id="perfect-for-you-if">Perfect for you if…</h3>

<ul>
  <li><i class="fas fa-check" style="color: #81c0aa;"></i> You have Python code that others could benefit from using</li>
  <li><i class="fas fa-check" style="color: #81c0aa;"></i> You’re tired of sharing code via email or messy file transfers</li>
  <li><i class="fas fa-check" style="color: #81c0aa;"></i> You want people to be able to install and use your tools</li>
  <li><i class="fas fa-check" style="color: #81c0aa;"></i> You’ve heard of PyPI but don’t know how to get your package there and how to do it securely.</li>
  <li><i class="fas fa-check" style="color: #81c0aa;"></i> You want to better understand the complex Python packaging ecosystem</li>
</ul>

<h3 id="what-youll-walk-away-with">What you’ll walk away with</h3>

<ul>
  <li><strong>Complete Package Template:</strong> Ready-to-use project structure</li>
  <li><strong>Automation Workflows:</strong> GitHub Actions for testing and publishing</li>
  <li><strong>Quality Checklists:</strong> Never miss important packaging steps</li>
  <li><strong>Publishing Guide:</strong> Step-by-step instructions for secure PyPI deployment using GitHub actions</li>
</ul>

<h3 id="pre-requisites">Pre-requisites</h3>

<p>To successfully follow along in this workshop, you should:</p>

<ul>
  <li>Know how to write Python code</li>
  <li>Understand how to write and use functions</li>
  <li>Have a Free account to create a GitHub account (you can work using GitHub codespaces during this workshop, and setting this account up is free if you don’t already have one.</li>
  <li>You should have internet access</li>
</ul>

<h3 id="your-instructors--helpers">Your instructors &amp; helpers</h3>

<ul>
  <li><a href="https://www.github.com/lwasser"><strong>Leah Wasser</strong></a>, the Executive Director and Founder of pyOpenSci, brings over 20 years of experience teaching technical data science topics in the scientific space. pyOpenSci has worked with hundreds of scientific Python package maintainers and has helped over 50 packages improve their structure and distribution through our peer review process.</li>
  <li><a href="https://www.github.com/ucodery"><strong>Jeremiah Paige:</strong></a> is an open source author, contributor, and speaker, specifically working with Python for over 12 years. He is also a software engineer in the secure supply chain industry during work hours.</li>
  <li><a href="https://github.com/ab93"><strong>Avik Basu:</strong></a> is an open source contributor, speaker, and mentor. He is a seasoned machine learning engineer with extensive experience in both major tech companies and fast-moving startups.</li>
</ul>]]></content><author><name>pyOpenSci</name></author><category term="events" /><summary type="html"><![CDATA[Turn your Python code into a professional package that others can easily install, use, and contribute to. Learn the complete packaging workflow with hands-on demos and proven templates.]]></summary></entry><entry><title type="html">pyOpenSci Workshop: Create a Python package – Stanford Open Source Program Office</title><link href="https://www.pyopensci.org/events/pyopensci-stanford-create-python-package-workshop.html" rel="alternate" type="text/html" title="pyOpenSci Workshop: Create a Python package – Stanford Open Source Program Office" /><published>2025-09-02T00:00:00+00:00</published><updated>2025-09-02T00:00:00+00:00</updated><id>https://www.pyopensci.org/events/stanford-ospo-how-to-create-a-python-package-workshop</id><content type="html" xml:base="https://www.pyopensci.org/events/pyopensci-stanford-create-python-package-workshop.html"><![CDATA[<h2 id="create-a-python-package-make-your-python-code-easier-to-share-and-use">Create a Python package: make your Python code easier to share and use</h2>

<ul>
  <li><strong>When:</strong> Thursday, 2 October @ 10:00 AM Mountain Time // 9:00AM Pacific Time</li>
  <li><strong>Where:</strong> We will use the Spatial Chat platform to create a classroom-like learning experience.</li>
</ul>

<p>This event, hosted in partnership with <a href="https://opensource.stanford.edu/">Stanford’s Open Source Program
Office</a>, teaches participants best practices for packaging their Python code. You will learn how to build more reliable research tools and software development skills.</p>

<h2 id="setup-instructions">Setup instructions</h2>

<p>You can choose to work on your own machine during the workshop or use the GitHub Codespace we’ve set up for you. Codespaces include all the tools needed to create your first package—preinstalled and ready to go.</p>

<p>We encourage you to use GitHub Codespaces! If you prefer to install things locally, please do so <strong>before</strong> the workshop.</p>

<h3 id="1-make-sure-you-have-a-github-and-test-pypi-account">1. Make sure you have a GitHub and Test PyPI account</h3>

<p>Before the workshop, please create and log into the following accounts:</p>

<ol>
  <li><a href="https://www.github.com">Create a free GitHub account</a> if you don’t already have one.</li>
  <li><a href="https://test.pypi.org/account/register">Create a free account on Test PyPI</a> — we’ll use this to practice publishing packages.</li>
</ol>

<blockquote class="notice notice-important">
  <p><i class="fa-solid fa-lock"></i> <strong>Important:</strong> To follow along when we publish to Test PyPI, you must enable <strong>two-factor authentication (2FA)</strong> on your Test PyPI account. We strongly recommend doing this <strong>before</strong> the workshop!</p>
</blockquote>

<h2 id="2a-setup-for-working-locally-on-your-laptop">2a. Setup for working locally on your laptop</h2>

<p>We recommend using GitHub Codespaces (see next section) to avoid issues with environment setup. However, if you prefer to work locally, please ensure your environment is set up and ready before the workshop.</p>

<p>If you’re comfortable with Python environments, arrive with an environment that has:</p>

<ul>
  <li><a href="https://www.pyopensci.org/python-package-guide/tutorials/get-to-know-hatch.html#install-hatch">Hatch installed</a></li>
  <li><a href="https://copier.readthedocs.io/en/stable/#installation">Copier installed</a>
    <ul>
      <li>You can install both via <code class="language-plaintext highlighter-rouge">pipx</code>, <code class="language-plaintext highlighter-rouge">uv</code>, pixi, or any preferred package manager.</li>
    </ul>
  </li>
  <li><a href="https://code.visualstudio.com/download">VS Code</a> (or any IDE you prefer for packaging)</li>
</ul>

<blockquote class="notice">
  <p><i class="fa-solid fa-triangle-exclamation"></i> <strong>Note:</strong></p>
  <ul>
    <li>We strongly suggest that you visit GitHub.com and <a href="https://github.com/pyOpenSci/pyopensci-workshop-create-python-package">Fork our packaging workshop repository</a> in case any issues arise with your local installation. This will ensure that you can follow along with us regardless of your environment setup.</li>
    <li>JupyterLab or Jupyter Notebook is <strong>not ideal</strong> for the packaging work we’ll be doing.</li>
  </ul>
</blockquote>

<h2 id="2b-if-you-plan-to-use-github-codespaces-suggested">2b. If you plan to use GitHub Codespaces (SUGGESTED)</h2>

<p>We strongly recommend using our curated <a href="https://codespaces.new/pyOpenSci/pyopensci-workshop-create-python-package?quickstart=1">GitHub Codespace</a>, which can be found in your forked workshop repository. This workspace is already set up with:</p>

<ul>
  <li>VSCode, copier, Hatch, and everything you need to create your first Python package successfully. Codespaces also allows you to easily commit your work during the workshop to your own forked GitHub repository.</li>
</ul>

<p><strong>Before the workshop do the following</strong></p>

<ul>
  <li>Go to GitHub.com and <a href="https://github.com/pyOpenSci/pyopensci-workshop-create-python-package">Fork our Python package workshop repository</a></li>
</ul>

<figure>
    <picture>
    <img src="/images/github/codespaces/scipy-fork-repo.gif" alt="." />
    </picture>
</figure>

<ul>
  <li>Launch the codespace before the workshop:</li>
</ul>

<p class="notice"><i class="fa-solid fa-circle-info"></i> The initial spin-up for a codespace can take up to 15 minutes or longer. Once GitHub creates the cloud environment, it will be quicker to relaunch. Please do this before attending the workshop session.</p>

<p>To open your Codespace,</p>

<ul>
  <li>Go to your forked workshop repository on GitHub,</li>
  <li>Switch to a branch that you want to work on during the workshop,</li>
  <li>Click the code drop-down button (where you’d find a link to clone a repo)</li>
  <li>Click on the Codespaces tab in the drop-down.</li>
</ul>

<p>Within the Codespaces tab you will see a button: <kbd style="background-color: #2da44e; color: white; padding: 2px 6px; border-radius: 4px;">
Create codespace on main
</kbd>. This button launches a Codespace from the currently active branch. It will default to the
<code class="language-plaintext highlighter-rouge">main</code> branch if you haven’t changed your branch in the repository.</p>

<p>The animated gif below walks you through how this works.</p>

<figure style="width: 55%; margin: 0 auto;">
  <picture>
    <source srcset="/images/github/codespaces/create-github-codespace-main.webp" type="image/webp" />
    <img src="/images/github/codespaces/create-github-codespace-main.png" alt="Create codespace on main button" />
  </picture>
</figure>

<blockquote>
  <p><i class="fa-solid fa-circle-info"></i> To follow GitHub best practices, always create a new branch before making
changes to a repository, even if you own the repository. Avoid working directly on the <code class="language-plaintext highlighter-rouge">main</code> branch.</p>
</blockquote>

<h2 id="-about-github-codespaces-working-in-the-cloud"><i class="fa-solid fa-cloud"></i> About GitHub Codespaces: Working in the cloud</h2>

<h2 id="what-is-a-codespace">What is a codespace</h2>

<p>GitHub Codespaces are cloud-based development environments that let you
code directly in your browser—no local setup needed. They provide fully
configured, container-based environments connected to your GitHub
repository.</p>

<p>You can customize Codespaces with <code class="language-plaintext highlighter-rouge">.devcontainer</code> files to match your
development setup. The Codespace for this workshop opens in Visual Studio
Code by default, but you can configure it to use any IDE you prefer.</p>

<p>Learn more in the <a href="https://docs.github.com/en/codespaces/overview">GitHub Codespaces docs</a>.</p>

<p class="notice">Codespaces are free for up to 60 hours/month on GitHub’s free plan. Be sure
to shut yours down after the workshop to conserve your allocated time.</p>

<blockquote class="notice">
  <p>Codespaces are associated with your <strong>personal GitHub account</strong>, even if
you open one from the pyOpenSci repository. The usage counts toward your
own GitHub credits.</p>
</blockquote>

<h3 id="view--manage-open-codespaces">View &amp; manage open codespaces</h3>

<p>Once you’ve opened a Codespace, you can return to it later without needing
to start from scratch. GitHub will reuse the environment, making it launch
significantly faster the second time.</p>

<p>If possible, resume the <strong>same Codespace</strong> you started in, rather than
creating a new one in your fork. Read on to learn how to find and reopen a codespace.</p>

<p><i class="fa-solid fa-link"></i>
<a href="https://github.com/codespaces">View all active Codespaces associated with your account</a></p>

<blockquote class="notice">
  <p><i class="fa-solid fa-circle-info"></i> When you delete a Codespace, you’re
ending the session, but the configuration remains available so you can
launch a new one anytime.
<a href="https://docs.github.com/en/codespaces/developing-in-a-codespace/stopping-and-starting-a-codespace">Learn more in the GitHub docs</a></p>
</blockquote>

<h3 id="how-to-relaunch-a-codespace">How to relaunch a codespace</h3>

<p>To relaunch a Codespace:</p>

<ol>
  <li>Go to your fork of the workshop repository.</li>
  <li>Click the <strong>Code</strong> dropdown (same as when you first created the Codespace).</li>
  <li>Select the <strong>Codespaces</strong> tab to view existing environments.</li>
  <li>Select the codespace that you want to resume from the list (see image below).</li>
</ol>

<p>As you can see in the animated gif below, GitHub codespaces always have fun names.</p>

<figure>
  <picture>
    <img src="/images/github/codespaces/reopen-codespace.gif" alt="GIF showing how to reopen a GitHub Codespace" />
  </picture>
</figure>

<div class="notice">

  <p class="header"><i class="fa-solid fa-users-line"></i> Connect with us!</p>

  <p>There are many ways to get involved if you’re interested!</p>

  <ul>
    <li>If you read through our lessons and want to suggest changes, open an issue in our <a href="https://github.com/pyOpenSci/lessons">lessons repository here</a></li>
    <li><a href="https://forms.gle/GHfxvmS47nQFDcBM6">Volunteer to be a reviewer for pyOpenSci’s software review process</a></li>
    <li><a href="https://www.pyopensci.org/software-peer-review/how-to/author-guide.html#submit-your-package-for-peer-review">Submit a Python package to pyOpenSci for peer review</a></li>
    <li><a href="https://give.communityin.org/pyopensci_2024">Donate to pyOpenSci</a> to support scholarships for future training events and the development of new learning content.</li>
    <li>Check out our <a href="/volunteer.html">volunteer page</a> for other ways to get involved.</li>
  </ul>

  <p>You can also:</p>

  <ul>
    <li>Keep an eye on our <a href="/events.html">events page</a> for upcoming training events.</li>
  </ul>

  <p>Follow us on social platforms:</p>

  <ul>
    <li><a href=""><i class="fa-brands fa-mastodon" style="color:#81c0aa;"></i> Mastodon</a></li>
    <li><a href="https://bsky.app/profile/pyopensci.org"><i class="fa-solid fa-cloud" style="color:#81c0aa;"></i> Bluesky</a></li>
    <li><a href=""><i class="fa-brands fa-linkedin" style="color:#81c0aa;"></i> LinkedIn</a></li>
    <li><a href=""><i class="fa-brands fa-github" style="color:#81c0aa;"></i> GitHub</a></li>
    <li><a href=""><i class="fa-brands fa-youtube" style="color:#81c0aa;"></i> YouTube</a></li>
  </ul>

  <p>If you are on LinkedIn, check out and <a href="https://www.linkedin.com/newsletters/7179551305344933888/?displayConfirmation=true">subscribe to our newsletter</a>.</p>

  <p>You can also:</p>

  <ul>
    <li>Check out our <a href="https://www.pyopensci.org/python-package-guide/index.html">Python Package Guide</a> for comprehensive packaging guidance</li>
    <li>Keep an eye on our <a href="/events.html">events page</a> for upcoming training events</li>
  </ul>

</div>]]></content><author><name>pyOpenSci</name></author><category term="events" /><summary type="html"><![CDATA[Python packaging can be tricky to navigate. pyOpenSci will lead a pilot workshop on creating your first Python package. The goal of this workshop is to help scientists learn how to package and make code installable and shareable. Read on to learn more!]]></summary></entry><entry><title type="html">Succession is Success: pyOpenSci’s Executive Council Transition Marks Organizational Maturity</title><link href="https://www.pyopensci.org/blog/pyopensci-bof-community-scipy-2025.html" rel="alternate" type="text/html" title="Succession is Success: pyOpenSci’s Executive Council Transition Marks Organizational Maturity" /><published>2025-08-14T00:00:00+00:00</published><updated>2025-08-14T00:00:00+00:00</updated><id>https://www.pyopensci.org/blog/pyopensci-executive-council-rototation</id><content type="html" xml:base="https://www.pyopensci.org/blog/pyopensci-bof-community-scipy-2025.html"><![CDATA[<p>When an organization successfully navigates its first leadership transition, it’s a milestone worth celebrating. It demonstrates that the structures, processes, and culture you’ve built are strong enough to endure beyond any single individual. We’ve seen these transitions happening in our <a href="https://www.pyopensci.org/handbook/governance/structure.html#peer-review-editorial-board">Editorial Board</a> over the past 3 years. Today, we’re proud to announce pyOpenSci’s first <a href="https://www.pyopensci.org/handbook/governance/executive-council.html#pyopensci-executive-council">Executive Council</a> transition—a sign of our organization’s growth and maturity.</p>

<figure>
  <picture>
  <source srcset="/images/blog/2025/executive-council-rotation-tracy.webp" type="image/webp" />
  <img src="/images/blog/2025/executive-council-rotation-tracy.png" alt="A graphic that says --Tracy Teal has completed a 3 year term as Executive Council Chair. We are grateful for the expertise, time and effort Tracy has put into the strategic vision for pyOpenSci.We also are grateful to Karen Cranston for stepping into the Executive Council chair position. And we welcome April Johnson as our newest Executive Council member!A timeline showing the growth of pyOpenSci from 2019 to 2024. It also has images of 3 women, Tracy, Karen and April on it on the right." style="width: 80%;" />
  </picture>
</figure>

<p>As founding Executive Council Chair <strong>Tracy Teal</strong> transitions from her leadership role after three transformative years, we’re excited to welcome <strong>Karen Cranston</strong> as our new Executive Council Chair and <strong>April Johnson</strong> as a new Executive Council member. This transition represents not just changing leadership, but the successful maturation of pyOpenSci as an organization.</p>

<h2 id="-from-grassroots-vision-to-established-organization"><i class="fa-solid fa-seedling"></i> From grassroots vision to established organization</h2>

<p>pyOpenSci began in 2018 as a passion project born from engagement in the Python, open source community. As a volunteer who deeply cared about scientific open source software, I saw numerous pain points in how the Python scientific community approached software quality and sustainability. We brought together a small group of <a href="https://www.pyopensci.org/handbook/reference/index.html">like-minded open source leaders</a> to pilot what <a href="https://www.pyopensci.org/about-peer-review/index.html">peer review of scientific Python software</a> could look like—creating something that didn’t exist but was clearly needed.</p>

<p>Five years later, our grassroots effort had evolved into something much larger. In 2022, with Sloan Foundation funding secured, we transitioned to fiscal sponsorship under the 501(c)(3) fiscal host, Community Initiatives, establishing pyOpenSci as an independent, fiscally-sponsored project. This transition marked our transformation from a purely volunteer-driven initiative to a structured organization with <a href="https://www.pyopensci.org/handbook/governance/structure.html">formal governance</a>, funding, and accountability structures.</p>

<h2 id="-building-strong-governance-the-executive-councils-role"><i class="fa-solid fa-sitemap"></i> Building strong governance: The Executive Council’s role</h2>

<p>The <a href="https://www.pyopensci.org/handbook/governance/executive-council.html">pyOpenSci Executive Council</a> was founded in 2022 as the cornerstone of our governance structure. The Council provides strategic oversight, organizational guidance, and accountability while serving as ambassadors for our mission and as a support system for our <a href="https://www.pyopensci.org/handbook/governance/structure.html#executive-director">Executive Director</a>. Working alongside our <a href="https://www.pyopensci.org/handbook/governance/structure.html#advisory-council">Advisory Council</a>, which offers domain-specific expertise, this governance structure has been instrumental in our steady growth.</p>

<h2 id="-three-years-of-shared-accomplishments"><i class="fa-solid fa-star"></i> Three years of shared accomplishments</h2>

<p>Under Tracy’s leadership as our founding Executive Council (EC) Chair, the EC has achieved remarkable milestones over the past three years. Together, we:</p>

<ul>
  <li><strong>Established our foundational identity:</strong> Crafted a <a href="https://www.pyopensci.org/handbook/governance/mission-values.html#mission-vision-and-values">powerful mission</a> while directing the vision and values of our organization that guide our work together.</li>
  <li><strong>Built robust governance structures:</strong> Created transparent decision-making processes and accountability mechanisms.</li>
  <li><strong>Fostered a healthier and inclusive community:</strong> Implemented a comprehensive <a href="https://www.pyopensci.org/handbook/CODE_OF_CONDUCT.html">code of conduct</a> with clear procedures that support inclusive community engagement.</li>
  <li><strong>Secured sustainable funding:</strong> We have also secured <a href="https://www.pyopensci.org/blog/czi-funds-pyOpenSci-2024.html">over $1,000,000 in funding</a> while building relationships for future support.</li>
</ul>

<p>These achievements reflect the successful synergy between Executive Council members who brought diverse expertise in nonprofit management, open source communities, and scientific software development to guide our strategic direction.</p>

<h2 id="-celebrating-transition-a-sign-of-success"><i class="fa-solid fa-leaf"></i> Celebrating transition: a sign of success</h2>

<p>Three years into our journey as an independent organization, this Executive Council transition marks a milestone we’re celebrating as a symbol of organizational maturity and success.</p>

<p>Tracy’s non profit leadership experience, strategic vision and steady guidance have been foundational to everything we’ve accomplished—from establishing our governance structures to guiding us through the critical early years of organizational development. As she transitions from her EC Chair role, we’re deeply grateful for the strong foundation she’s helped build.</p>

<p><strong>Karen Cranston</strong> will continue to serve on the pyOpenSci leadership team, moving into the role of EC Chair. Karen brings extensive experience in open science, having served in leadership roles at organizations such as <a href="https://carpentries.org/">The Carpentries</a> and the <a href="https://www.open-bio.org/">Open Bioinformatics Foundation</a> that bridge community, research and data science. Karen’s deep understanding of both the scientific community and organizational development makes her ideally suited to guide pyOpenSci through our next phase of growth.</p>

<p>We’re also thrilled to welcome <strong>April Johnson</strong> to our Executive Council. April brings invaluable expertise as a technology executive and consultant to humanities and civil rights nonprofits, most recently as <a href="https://2i2c.org/">People Lead at 2i2c</a> and as Board Chair for <a href="https://heshezewe.org/">He She Ze &amp; We</a>. Her experience in organizational development and people-centered leadership will be crucial as we continue to scale our community, work on sustainability, and impact.</p>

<h2 id="-what-this-maturity-enables"><i class="fa-brands fa-pagelines"></i> What this maturity enables</h2>

<p>This successful transition demonstrates that pyOpenSci has evolved into a growing, sustainable organization. Succession is success as it demonstrates that we’ve built something larger than any individual contributor—with proven governance structures, institutional knowledge, and a thriving community that transcends leadership changes.</p>

<p>As we move forward under Karen and April’s guidance, we’re excited about our next chapter. This includes a strategic focus on sustainability—thoughtfully considering how we generate revenue as an organization, and ways we can scale that also support long-term sustainability. We’re also exploring deeper collaborations with aligned communities like <a href="https://ropensci.org/">rOpenSci</a>, <a href="https://prereview.org/">PREreview</a>, <a href="https://carpentries.org/">The Carpentries</a>, and <a href="https://openlifesci.org/">Open Life Science</a>.</p>

<p>This transition positions us to take on bigger challenges, expand our impact on the scientific Python ecosystem, and continue building the future of open scientific software. We can’t wait to see what comes next!</p>

<div class="notice">

  <h2 id="connect-with-us">Connect with us!</h2>

  <p>There are lots of ways to get involved if you are interested!</p>

  <ul>
    <li>If you read through our lessons and want to suggest changes, open an issue in our <a href="https://github.com/pyOpenSci/lessons">lessons repository here</a>.</li>
    <li><a href="https://docs.google.com/forms/u/6/d/e/1FAIpQLSeVf-L_1-jYeO84OvEE8UemEoCmIiD5ddP_aO8S90vb7srADQ/viewform?usp=send_form">Volunteer to be a reviewer for pyOpenSci’s software review process</a>.</li>
    <li><a href="https://www.pyopensci.org/software-peer-review/how-to/author-guide.html#submit-your-package-for-peer-review">Submit a scientific Python package to pyOpenSci for peer review.</a></li>
    <li><a href="https://give.communityin.org/pyopensci_2024?ref=ab_0sHhtifYvgR0sHhtifYvgR">Donate to pyOpenSci</a> to support scholarships for future training events and the development of new learning content.</li>
    <li>Check out our <a href="https://www.pyopensci.org/volunteer.html">volunteer page</a> for other ways to get involved.</li>
  </ul>

  <p>You can also:</p>

  <ul>
    <li>Keep an eye on our <a href="https://www.pyopensci.org/events.html">events page</a> for upcoming training events.</li>
  </ul>

  <p>Follow us on social platforms:</p>

  <ul>
    <li><a href="https://fosstodon.org/@pyopensci">Mastodon</a></li>
    <li><a href="https://bsky.app/profile/pyopensci.org">Bluesky</a></li>
    <li><a href="https://www.linkedin.com/company/pyopensci/">LinkedIn</a></li>
    <li><a href="https://github.com/pyOpenSci">GitHub</a></li>
  </ul>

  <p>If you are on LinkedIn, check out and <a href="https://www.linkedin.com/newsletters/7179551305344933888/?displayConfirmation=true">subscribe to our newsletter</a>, too.</p>

</div>]]></content><author><name>pyOpenSci</name></author><category term="blog-post" /><category term="community" /><summary type="html"><![CDATA[The Executive Council drives pyOpenSci's mission and vision. Learn more about how the council works, and about the current rotation that is happening as our board chair steps down and another member joins us marking a milestone of incredible growth for pyOpenSci.]]></summary></entry></feed>