Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.

Repository files navigation

pydevtips, Slides

Documentation StatusUnit tests and formatting

Reproducibility is important for software: if it's not reproducible, it's not useful. Even if you don't plan on sharing your code, imagine coming back to a project after a few weeks, or having to install it on a new machine. You'll be all the more thankful to your past self if you have a clear way to install and run your code.

This repository is a collection of tips and tricks for developing stable and reproducible Python code. There is a slight focus on scientific computing, but the general principles can apply to most Python projects. If you're reading this from GitHub, please check out the documentation for a more in-depth explanation of the topics covered.

The intended audience is myself (as I often find myself going to past projects to find how I did something!), but also for students and anyone who is interested in learning some new tricks or even sharing their own! I try to follow the principles laid out here on development and reproducibility, so feel free to point out any lapses or suggest improvements, either by opening an issue or pull request.

As is typical in open source, there are many ways to do the same thing. But hopefully this gives you a starting point. Feel free to pick and choose the features that you like. This flexibility is one of the best (and worst parts) of open source. Some of the things we cover:

  • Virtual environments.
  • Version control.
  • Reproducible examples.
  • Documentation.
  • Code formatting.
  • Unit tests and continuous integration.
  • Packaging and distribution.
  • Remove development.

The accompanying slides are from a tutorial given at ENS Ulm (January 2023). Feel free to modify and use it for your own purposes.

Note

A good amount of this documentation and code is written with GitHub Copilot, which I highly recommend for development. If you don't like writing documentation, it is a great way to get started as it is able to understand the functionality of your code and produce meaningful text to describe it. It should be used be used with caution, but it can be a great tool for getting started and you often you need to make a few tweaks (like the previous repetition). But it's a huge time-saver!

Installation

This "dummy" package can be installed with pip:

pip install pydevtips

Or from source, e.g. with Anaconda / Miniconda:

# create new environment, press enter to accept
conda create -n project_env python=3.11
# view available environments
conda info --envs
# activate environment
conda activate project_env
# install package locally
(project_env) pip install -e .# run tests# - one time: pip install pytest
(project_env) pytest
# deactivate environment
(project_env) conda deactivate

Examples

Examples can be found in the examples and notebooks folders. Scripts from the examples folder should be run from the root of the repository, e.g.:

python examples/real_convolve.py

Parameter setting is done with hydra. More on that in the :ref:`Reproducible examples<Reproducible examples>` section of the documentation.

TODO

  • numba: https://numba.pydata.org/
  • picking a license
  • badge for google slides
  • change documentation links to main branch
  • github page
  • point out features in scripts: object-oriented, asserts, tqdm, type hints
  • matplotlib, pytest, black in dev install
  • manifest file to not include file in package
  • GitHub actions for releasing to PyPi when changes to version
  • pytorch compatible
  • Cython / C++

About

Minimal package to demonstrate good Python development habits

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - LauzHack/python-dev-tips: Minimal package to demonstrate good Python development habits · GitHub
Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.

Repository files navigation

pydevtips, Slides

Documentation StatusUnit tests and formatting

Reproducibility is important for software: if it's not reproducible, it's not useful. Even if you don't plan on sharing your code, imagine coming back to a project after a few weeks, or having to install it on a new machine. You'll be all the more thankful to your past self if you have a clear way to install and run your code.

This repository is a collection of tips and tricks for developing stable and reproducible Python code. There is a slight focus on scientific computing, but the general principles can apply to most Python projects. If you're reading this from GitHub, please check out the documentation for a more in-depth explanation of the topics covered.

The intended audience is myself (as I often find myself going to past projects to find how I did something!), but also for students and anyone who is interested in learning some new tricks or even sharing their own! I try to follow the principles laid out here on development and reproducibility, so feel free to point out any lapses or suggest improvements, either by opening an issue or pull request.

As is typical in open source, there are many ways to do the same thing. But hopefully this gives you a starting point. Feel free to pick and choose the features that you like. This flexibility is one of the best (and worst parts) of open source. Some of the things we cover:

  • Virtual environments.
  • Version control.
  • Reproducible examples.
  • Documentation.
  • Code formatting.
  • Unit tests and continuous integration.
  • Packaging and distribution.
  • Remove development.

The accompanying slides are from a tutorial given at ENS Ulm (January 2023). Feel free to modify and use it for your own purposes.

Note

A good amount of this documentation and code is written with GitHub Copilot, which I highly recommend for development. If you don't like writing documentation, it is a great way to get started as it is able to understand the functionality of your code and produce meaningful text to describe it. It should be used be used with caution, but it can be a great tool for getting started and you often you need to make a few tweaks (like the previous repetition). But it's a huge time-saver!

Installation

This "dummy" package can be installed with pip:

pip install pydevtips

Or from source, e.g. with Anaconda / Miniconda:

# create new environment, press enter to accept
conda create -n project_env python=3.11
# view available environments
conda info --envs
# activate environment
conda activate project_env
# install package locally
(project_env) pip install -e .# run tests# - one time: pip install pytest
(project_env) pytest
# deactivate environment
(project_env) conda deactivate

Examples

Examples can be found in the examples and notebooks folders. Scripts from the examples folder should be run from the root of the repository, e.g.:

python examples/real_convolve.py

Parameter setting is done with hydra. More on that in the :ref:`Reproducible examples<Reproducible examples>` section of the documentation.

TODO

  • numba: https://numba.pydata.org/
  • picking a license
  • badge for google slides
  • change documentation links to main branch
  • github page
  • point out features in scripts: object-oriented, asserts, tqdm, type hints
  • matplotlib, pytest, black in dev install
  • manifest file to not include file in package
  • GitHub actions for releasing to PyPi when changes to version
  • pytorch compatible
  • Cython / C++

About

Minimal package to demonstrate good Python development habits

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - LauzHack/python-dev-tips: Minimal package to demonstrate good Python development habits · GitHub
Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.

Repository files navigation

pydevtips, Slides

Documentation StatusUnit tests and formatting

Reproducibility is important for software: if it's not reproducible, it's not useful. Even if you don't plan on sharing your code, imagine coming back to a project after a few weeks, or having to install it on a new machine. You'll be all the more thankful to your past self if you have a clear way to install and run your code.

This repository is a collection of tips and tricks for developing stable and reproducible Python code. There is a slight focus on scientific computing, but the general principles can apply to most Python projects. If you're reading this from GitHub, please check out the documentation for a more in-depth explanation of the topics covered.

The intended audience is myself (as I often find myself going to past projects to find how I did something!), but also for students and anyone who is interested in learning some new tricks or even sharing their own! I try to follow the principles laid out here on development and reproducibility, so feel free to point out any lapses or suggest improvements, either by opening an issue or pull request.

As is typical in open source, there are many ways to do the same thing. But hopefully this gives you a starting point. Feel free to pick and choose the features that you like. This flexibility is one of the best (and worst parts) of open source. Some of the things we cover:

  • Virtual environments.
  • Version control.
  • Reproducible examples.
  • Documentation.
  • Code formatting.
  • Unit tests and continuous integration.
  • Packaging and distribution.
  • Remove development.

The accompanying slides are from a tutorial given at ENS Ulm (January 2023). Feel free to modify and use it for your own purposes.

Note

A good amount of this documentation and code is written with GitHub Copilot, which I highly recommend for development. If you don't like writing documentation, it is a great way to get started as it is able to understand the functionality of your code and produce meaningful text to describe it. It should be used be used with caution, but it can be a great tool for getting started and you often you need to make a few tweaks (like the previous repetition). But it's a huge time-saver!

Installation

This "dummy" package can be installed with pip:

pip install pydevtips

Or from source, e.g. with Anaconda / Miniconda:

# create new environment, press enter to accept
conda create -n project_env python=3.11
# view available environments
conda info --envs
# activate environment
conda activate project_env
# install package locally
(project_env) pip install -e .# run tests# - one time: pip install pytest
(project_env) pytest
# deactivate environment
(project_env) conda deactivate

Examples

Examples can be found in the examples and notebooks folders. Scripts from the examples folder should be run from the root of the repository, e.g.:

python examples/real_convolve.py

Parameter setting is done with hydra. More on that in the :ref:`Reproducible examples<Reproducible examples>` section of the documentation.

TODO

  • numba: https://numba.pydata.org/
  • picking a license
  • badge for google slides
  • change documentation links to main branch
  • github page
  • point out features in scripts: object-oriented, asserts, tqdm, type hints
  • matplotlib, pytest, black in dev install
  • manifest file to not include file in package
  • GitHub actions for releasing to PyPi when changes to version
  • pytorch compatible
  • Cython / C++

About

Minimal package to demonstrate good Python development habits

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - LauzHack/python-dev-tips: Minimal package to demonstrate good Python development habits · GitHub
Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.

Repository files navigation

pydevtips, Slides

Documentation StatusUnit tests and formatting

Reproducibility is important for software: if it's not reproducible, it's not useful. Even if you don't plan on sharing your code, imagine coming back to a project after a few weeks, or having to install it on a new machine. You'll be all the more thankful to your past self if you have a clear way to install and run your code.

This repository is a collection of tips and tricks for developing stable and reproducible Python code. There is a slight focus on scientific computing, but the general principles can apply to most Python projects. If you're reading this from GitHub, please check out the documentation for a more in-depth explanation of the topics covered.

The intended audience is myself (as I often find myself going to past projects to find how I did something!), but also for students and anyone who is interested in learning some new tricks or even sharing their own! I try to follow the principles laid out here on development and reproducibility, so feel free to point out any lapses or suggest improvements, either by opening an issue or pull request.

As is typical in open source, there are many ways to do the same thing. But hopefully this gives you a starting point. Feel free to pick and choose the features that you like. This flexibility is one of the best (and worst parts) of open source. Some of the things we cover:

  • Virtual environments.
  • Version control.
  • Reproducible examples.
  • Documentation.
  • Code formatting.
  • Unit tests and continuous integration.
  • Packaging and distribution.
  • Remove development.

The accompanying slides are from a tutorial given at ENS Ulm (January 2023). Feel free to modify and use it for your own purposes.

Note

A good amount of this documentation and code is written with GitHub Copilot, which I highly recommend for development. If you don't like writing documentation, it is a great way to get started as it is able to understand the functionality of your code and produce meaningful text to describe it. It should be used be used with caution, but it can be a great tool for getting started and you often you need to make a few tweaks (like the previous repetition). But it's a huge time-saver!

Installation

This "dummy" package can be installed with pip:

pip install pydevtips

Or from source, e.g. with Anaconda / Miniconda:

# create new environment, press enter to accept
conda create -n project_env python=3.11
# view available environments
conda info --envs
# activate environment
conda activate project_env
# install package locally
(project_env) pip install -e .# run tests# - one time: pip install pytest
(project_env) pytest
# deactivate environment
(project_env) conda deactivate

Examples

Examples can be found in the examples and notebooks folders. Scripts from the examples folder should be run from the root of the repository, e.g.:

python examples/real_convolve.py

Parameter setting is done with hydra. More on that in the :ref:`Reproducible examples<Reproducible examples>` section of the documentation.

TODO

  • numba: https://numba.pydata.org/
  • picking a license
  • badge for google slides
  • change documentation links to main branch
  • github page
  • point out features in scripts: object-oriented, asserts, tqdm, type hints
  • matplotlib, pytest, black in dev install
  • manifest file to not include file in package
  • GitHub actions for releasing to PyPi when changes to version
  • pytorch compatible
  • Cython / C++

About

Minimal package to demonstrate good Python development habits

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - LauzHack/python-dev-tips: Minimal package to demonstrate good Python development habits · GitHub
Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.

Repository files navigation

pydevtips, Slides

Documentation StatusUnit tests and formatting

Reproducibility is important for software: if it's not reproducible, it's not useful. Even if you don't plan on sharing your code, imagine coming back to a project after a few weeks, or having to install it on a new machine. You'll be all the more thankful to your past self if you have a clear way to install and run your code.

This repository is a collection of tips and tricks for developing stable and reproducible Python code. There is a slight focus on scientific computing, but the general principles can apply to most Python projects. If you're reading this from GitHub, please check out the documentation for a more in-depth explanation of the topics covered.

The intended audience is myself (as I often find myself going to past projects to find how I did something!), but also for students and anyone who is interested in learning some new tricks or even sharing their own! I try to follow the principles laid out here on development and reproducibility, so feel free to point out any lapses or suggest improvements, either by opening an issue or pull request.

As is typical in open source, there are many ways to do the same thing. But hopefully this gives you a starting point. Feel free to pick and choose the features that you like. This flexibility is one of the best (and worst parts) of open source. Some of the things we cover:

  • Virtual environments.
  • Version control.
  • Reproducible examples.
  • Documentation.
  • Code formatting.
  • Unit tests and continuous integration.
  • Packaging and distribution.
  • Remove development.

The accompanying slides are from a tutorial given at ENS Ulm (January 2023). Feel free to modify and use it for your own purposes.

Note

A good amount of this documentation and code is written with GitHub Copilot, which I highly recommend for development. If you don't like writing documentation, it is a great way to get started as it is able to understand the functionality of your code and produce meaningful text to describe it. It should be used be used with caution, but it can be a great tool for getting started and you often you need to make a few tweaks (like the previous repetition). But it's a huge time-saver!

Installation

This "dummy" package can be installed with pip:

pip install pydevtips

Or from source, e.g. with Anaconda / Miniconda:

# create new environment, press enter to accept
conda create -n project_env python=3.11
# view available environments
conda info --envs
# activate environment
conda activate project_env
# install package locally
(project_env) pip install -e .# run tests# - one time: pip install pytest
(project_env) pytest
# deactivate environment
(project_env) conda deactivate

Examples

Examples can be found in the examples and notebooks folders. Scripts from the examples folder should be run from the root of the repository, e.g.:

python examples/real_convolve.py

Parameter setting is done with hydra. More on that in the :ref:`Reproducible examples<Reproducible examples>` section of the documentation.

TODO

  • numba: https://numba.pydata.org/
  • picking a license
  • badge for google slides
  • change documentation links to main branch
  • github page
  • point out features in scripts: object-oriented, asserts, tqdm, type hints
  • matplotlib, pytest, black in dev install
  • manifest file to not include file in package
  • GitHub actions for releasing to PyPi when changes to version
  • pytorch compatible
  • Cython / C++

About

Minimal package to demonstrate good Python development habits

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - LauzHack/python-dev-tips: Minimal package to demonstrate good Python development habits · GitHub
Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.

Repository files navigation

pydevtips, Slides

Documentation StatusUnit tests and formatting

Reproducibility is important for software: if it's not reproducible, it's not useful. Even if you don't plan on sharing your code, imagine coming back to a project after a few weeks, or having to install it on a new machine. You'll be all the more thankful to your past self if you have a clear way to install and run your code.

This repository is a collection of tips and tricks for developing stable and reproducible Python code. There is a slight focus on scientific computing, but the general principles can apply to most Python projects. If you're reading this from GitHub, please check out the documentation for a more in-depth explanation of the topics covered.

The intended audience is myself (as I often find myself going to past projects to find how I did something!), but also for students and anyone who is interested in learning some new tricks or even sharing their own! I try to follow the principles laid out here on development and reproducibility, so feel free to point out any lapses or suggest improvements, either by opening an issue or pull request.

As is typical in open source, there are many ways to do the same thing. But hopefully this gives you a starting point. Feel free to pick and choose the features that you like. This flexibility is one of the best (and worst parts) of open source. Some of the things we cover:

  • Virtual environments.
  • Version control.
  • Reproducible examples.
  • Documentation.
  • Code formatting.
  • Unit tests and continuous integration.
  • Packaging and distribution.
  • Remove development.

The accompanying slides are from a tutorial given at ENS Ulm (January 2023). Feel free to modify and use it for your own purposes.

Note

A good amount of this documentation and code is written with GitHub Copilot, which I highly recommend for development. If you don't like writing documentation, it is a great way to get started as it is able to understand the functionality of your code and produce meaningful text to describe it. It should be used be used with caution, but it can be a great tool for getting started and you often you need to make a few tweaks (like the previous repetition). But it's a huge time-saver!

Installation

This "dummy" package can be installed with pip:

pip install pydevtips

Or from source, e.g. with Anaconda / Miniconda:

# create new environment, press enter to accept
conda create -n project_env python=3.11
# view available environments
conda info --envs
# activate environment
conda activate project_env
# install package locally
(project_env) pip install -e .# run tests# - one time: pip install pytest
(project_env) pytest
# deactivate environment
(project_env) conda deactivate

Examples

Examples can be found in the examples and notebooks folders. Scripts from the examples folder should be run from the root of the repository, e.g.:

python examples/real_convolve.py

Parameter setting is done with hydra. More on that in the :ref:`Reproducible examples<Reproducible examples>` section of the documentation.

TODO

  • numba: https://numba.pydata.org/
  • picking a license
  • badge for google slides
  • change documentation links to main branch
  • github page
  • point out features in scripts: object-oriented, asserts, tqdm, type hints
  • matplotlib, pytest, black in dev install
  • manifest file to not include file in package
  • GitHub actions for releasing to PyPi when changes to version
  • pytorch compatible
  • Cython / C++

About

Minimal package to demonstrate good Python development habits

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - LauzHack/python-dev-tips: Minimal package to demonstrate good Python development habits · GitHub
Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.

Repository files navigation

pydevtips, Slides

Documentation StatusUnit tests and formatting

Reproducibility is important for software: if it's not reproducible, it's not useful. Even if you don't plan on sharing your code, imagine coming back to a project after a few weeks, or having to install it on a new machine. You'll be all the more thankful to your past self if you have a clear way to install and run your code.

This repository is a collection of tips and tricks for developing stable and reproducible Python code. There is a slight focus on scientific computing, but the general principles can apply to most Python projects. If you're reading this from GitHub, please check out the documentation for a more in-depth explanation of the topics covered.

The intended audience is myself (as I often find myself going to past projects to find how I did something!), but also for students and anyone who is interested in learning some new tricks or even sharing their own! I try to follow the principles laid out here on development and reproducibility, so feel free to point out any lapses or suggest improvements, either by opening an issue or pull request.

As is typical in open source, there are many ways to do the same thing. But hopefully this gives you a starting point. Feel free to pick and choose the features that you like. This flexibility is one of the best (and worst parts) of open source. Some of the things we cover:

  • Virtual environments.
  • Version control.
  • Reproducible examples.
  • Documentation.
  • Code formatting.
  • Unit tests and continuous integration.
  • Packaging and distribution.
  • Remove development.

The accompanying slides are from a tutorial given at ENS Ulm (January 2023). Feel free to modify and use it for your own purposes.

Note

A good amount of this documentation and code is written with GitHub Copilot, which I highly recommend for development. If you don't like writing documentation, it is a great way to get started as it is able to understand the functionality of your code and produce meaningful text to describe it. It should be used be used with caution, but it can be a great tool for getting started and you often you need to make a few tweaks (like the previous repetition). But it's a huge time-saver!

Installation

This "dummy" package can be installed with pip:

pip install pydevtips

Or from source, e.g. with Anaconda / Miniconda:

# create new environment, press enter to accept
conda create -n project_env python=3.11
# view available environments
conda info --envs
# activate environment
conda activate project_env
# install package locally
(project_env) pip install -e .# run tests# - one time: pip install pytest
(project_env) pytest
# deactivate environment
(project_env) conda deactivate

Examples

Examples can be found in the examples and notebooks folders. Scripts from the examples folder should be run from the root of the repository, e.g.:

python examples/real_convolve.py

Parameter setting is done with hydra. More on that in the :ref:`Reproducible examples<Reproducible examples>` section of the documentation.

TODO

  • numba: https://numba.pydata.org/
  • picking a license
  • badge for google slides
  • change documentation links to main branch
  • github page
  • point out features in scripts: object-oriented, asserts, tqdm, type hints
  • matplotlib, pytest, black in dev install
  • manifest file to not include file in package
  • GitHub actions for releasing to PyPi when changes to version
  • pytorch compatible
  • Cython / C++

About

Minimal package to demonstrate good Python development habits

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages