SlideShare a Scribd company logo
1 of 27
1 © 2021 Anaconda
Making Reproducible
Conda-based Projects
Albert DeFusco
May 19, 2021
2 © 2021 Anaconda
Agenda
1 | Reproducible
Notebooks?
2 | Gathering materials
3 | Conda Environments
4 | Anaconda Project
5 | Sharing projects
6 | Demonstration
3 © 2021 Anaconda
Jupyter notebooks everywhere
4 © 2021 Anaconda
Are Jupyter notebooks reproducible?
A Large-scale Study about Quality and Reproducibility of Jupyter Notebooks
João Felipe Pimentel, Leonardo Murta, Vanessa Braganholo, Juliana Freire
● Analyzed 1 million Jupyter Notebooks on Github
○ Was the notebook readable?
○ Was the notebook named “Untitled.ipynb”?
○ Did the notebook define functions or classes?
○ Was the data provided?
○ Can the notebook be executed?
http://www.ic.uff.br/~leomurta/papers/pimentel2019a.pdf
5 © 2021 Anaconda
Are Jupyter notebooks reproducible?
A Large-scale Study about Quality and Reproducibility of Jupyter Notebooks
João Felipe Pimentel, Leonardo Murta, Vanessa Braganholo, Juliana Freire
“out of 863,878 attempted executions of valid notebooks (i.e., notebooks with
defined Python version and execution order), only 24.11% executed without
errors and only 4.03% produced the same results.”
http://www.ic.uff.br/~leomurta/papers/pimentel2019a.pdf
6 © 2021 Anaconda
Gather code and data
7 © 2021 Anaconda
Gather what you need in one directory
● Jupyter notebooks
● Script files
● data files
○ Or links to the data on the web
This is not a good idea
Much better!
8 © 2021 Anaconda
Why some people don’t like Notebooks
● Cells can be run out-of-order
● Cells can be deleted
● No guarantee that the correct execution can be repeated easily
9 © 2021 Anaconda
Recommendation: Restart and Run All
Before sharing your work
1. Restart Kernel and Run All Cells
2. Fix the first error
3. Repeat
Do this frequently
10 © 2021 Anaconda
Environments
11 © 2021 Anaconda
The Anaconda base environment
● Over 300 packages
already installed
● Data Science out-of-
the-box
12 © 2021 Anaconda
Plan ahead with multiple environments
● Keep multiple package versions installed
● You can use environments to
○ Try new versions of packages
○ Install old versions of packages
○ Install only the packages you need for a project
13 © 2021 Anaconda
Create the new environment
● On the Environment pane
○ Click Create
○ Provide a name
○ Select the Python version
● Continue to add more
packages
14 © 2021 Anaconda
Best practices
● Managing multiple environments can be challenging
● nb_conda
○ Install into your base environment and launch Jupyter
○ Access any environment where ipykernel, notebook, or jupyter has been installed
○ Every notebook will “remember” the environment that was used
15 © 2021 Anaconda
Works with Jupyter Notebook and JupyterLab
16 © 2021 Anaconda
Anaconda Project
17 © 2021 Anaconda
anaconda-project
● Open-source tool that helps you make reproducible projects
● With a single YAML text file you can
○ Specify Conda and Pip packages that will be installed
○ Specify URLs to automatically download data files
○ Specify executable commands that can launch scripts, applications, or Jupyter Notebooks
● You can easily share projects as
○ Archive files (zip, tar.gz, tar.bz2)
○ Uploaded to Anaconda.org
○ Docker images
18 © 2021 Anaconda
Install anaconda-project
● Provided with Anaconda Individual Edition
● Install or upgrade anaconda-project using
○ Anaconda Navigator
○ Conda
19 © 2021 Anaconda
Initialize your project on the Command Line
To create a new anaconda-project.yml file from scratch in your directory
$ anaconda-project init
$ anaconda-project add-packages package1 package2 …
$ anaconda-project add-packages --pip package3 package4 ...
20 © 2021 Anaconda
Initialize your project on the Command Line
To bootstrap a project from an existing Conda environment
$ conda env export --from-history environment-name > anaconda-project.yml
# add more packages if needed
$ anaconda-project add-packages package1 package2 …
$ anaconda-project add-packages --pip package3 package4 ...
Without the --from-history flag the environment will not work on all OSes
21 © 2021 Anaconda
Runnable commands
With Commands you can define how to execute your project
● Run a script or OS command
● Launch a Jupyter notebook
● Launch an application from a notebook or script. For example:
○ Bokeh or Panel dashboards
○ Flask, Django, or FastAPI web service
$ anaconda-project add-command --type notebook name notebook.ipynb
$ anaconda-project add-command --type unix name ‘panel serve notebook.ipynb’
$ anaconda-project add-command --type windows name ‘panel serve notebook.ipynb’
22 © 2021 Anaconda
Locking package versions
The anaconda-project.yml may now look like
name: my-project
packages:
- python=3.8
- notebook
- pandas
To completely specify the package versions (including pip freeze)
$ anaconda-project lock
Updating locked dependencies for env spec default…
Resolving conda packages for osx-64
Resolving conda packages for linux-64
Resolving conda packages for win-64
23 © 2021 Anaconda
Multiple ways to share your project
● Create a Git repository and push to Github like any other project
● Create a Zip or Tar archive
$ anaconda-project archive archive-name.zip
● Create an account on Anaconda.org and upload an archive
$ anaconda-project upload
● Create a Docker image (requires anaconda-project 0.10 or greater)
$ anaconda-project dockerize
24 © 2021 Anaconda
Demonstration
25 © 2021 Anaconda
Learn more
https://anaconda-project.readthedocs.io
26 © 2021 Anaconda
Review
● Use a new Conda environment or initialize an anaconda-project.yml file
● Gather notebooks, code, and data into one directory
● Make sure you can “Restart kernel and run all” on your notebooks
● Special features of anaconda-project
○ Lock package versions for Mac, Linux, and Windows
○ Define runnable commands
○ Easily share the project as an archive, on Anaconda.org, or Docker image
Thank You!
Albert DeFusco
adefusco@anaconda.com

More Related Content

What's hot

Distro Recipes 2013 : Upstream management and consequences on the distributi...
Distro Recipes 2013 : Upstream management and consequences on the  distributi...Distro Recipes 2013 : Upstream management and consequences on the  distributi...
Distro Recipes 2013 : Upstream management and consequences on the distributi...
Anne Nicolas
 

What's hot (20)

Hacking the Linux Kernel - An Introduction
Hacking the Linux Kernel - An IntroductionHacking the Linux Kernel - An Introduction
Hacking the Linux Kernel - An Introduction
 
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
[Paris Container Day 2021] nerdctl: yet another Docker & Docker Compose imple...
 
Create Dynamic console with OSGi and Adobe Flex
Create Dynamic console with OSGi and Adobe FlexCreate Dynamic console with OSGi and Adobe Flex
Create Dynamic console with OSGi and Adobe Flex
 
Embedded recipes 2018 - End-to-end software production for embedded - Guy Lun...
Embedded recipes 2018 - End-to-end software production for embedded - Guy Lun...Embedded recipes 2018 - End-to-end software production for embedded - Guy Lun...
Embedded recipes 2018 - End-to-end software production for embedded - Guy Lun...
 
Linux 开源操作系统发展新趋势
Linux 开源操作系统发展新趋势Linux 开源操作系统发展新趋势
Linux 开源操作系统发展新趋势
 
[DockerCon 2020] Hardening Docker daemon with Rootless Mode
[DockerCon 2020] Hardening Docker daemon with Rootless Mode[DockerCon 2020] Hardening Docker daemon with Rootless Mode
[DockerCon 2020] Hardening Docker daemon with Rootless Mode
 
Distro Recipes 2013 : Upstream management and consequences on the distributi...
Distro Recipes 2013 : Upstream management and consequences on the  distributi...Distro Recipes 2013 : Upstream management and consequences on the  distributi...
Distro Recipes 2013 : Upstream management and consequences on the distributi...
 
[KubeCon EU 2020] containerd Deep Dive
[KubeCon EU 2020] containerd Deep Dive[KubeCon EU 2020] containerd Deep Dive
[KubeCon EU 2020] containerd Deep Dive
 
Docker Workshop for beginner
Docker Workshop for beginnerDocker Workshop for beginner
Docker Workshop for beginner
 
Docker. General overview
Docker. General overviewDocker. General overview
Docker. General overview
 
Rootless Containers & Unresolved issues
Rootless Containers & Unresolved issuesRootless Containers & Unresolved issues
Rootless Containers & Unresolved issues
 
Docker for developers
Docker for developersDocker for developers
Docker for developers
 
[KubeCon NA 2020] containerd: Rootless Containers 2020
[KubeCon NA 2020] containerd: Rootless Containers 2020[KubeCon NA 2020] containerd: Rootless Containers 2020
[KubeCon NA 2020] containerd: Rootless Containers 2020
 
LUG - Install Fest 2008
LUG - Install Fest 2008LUG - Install Fest 2008
LUG - Install Fest 2008
 
What's new in kubernetes 1.3?
What's new in kubernetes 1.3?What's new in kubernetes 1.3?
What's new in kubernetes 1.3?
 
Git & GitHub
Git & GitHubGit & GitHub
Git & GitHub
 
Git & G
Git & GGit & G
Git & G
 
Integrating Puppet and Gitolite for sysadmins cooperations
Integrating Puppet and Gitolite for sysadmins cooperationsIntegrating Puppet and Gitolite for sysadmins cooperations
Integrating Puppet and Gitolite for sysadmins cooperations
 
ISC HPCW talks
ISC HPCW talksISC HPCW talks
ISC HPCW talks
 
Introduction to GNU/Linux
Introduction to GNU/LinuxIntroduction to GNU/Linux
Introduction to GNU/Linux
 

Similar to Making Conda-based Reproducible Projects

Similar to Making Conda-based Reproducible Projects (20)

25532813.pptx
25532813.pptx25532813.pptx
25532813.pptx
 
2022.03.23 Conda and Conda environments.pptx
2022.03.23 Conda and Conda environments.pptx2022.03.23 Conda and Conda environments.pptx
2022.03.23 Conda and Conda environments.pptx
 
Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...
Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...
Elevate Your Enterprise Python and R AI, ML Software Strategy with Anaconda T...
 
Linux GUI Applications on Windows Subsystem for Linux
Linux GUI Applications on Windows Subsystem for LinuxLinux GUI Applications on Windows Subsystem for Linux
Linux GUI Applications on Windows Subsystem for Linux
 
Docker for developers
Docker for developersDocker for developers
Docker for developers
 
Installing Anaconda Distribution of Python
Installing Anaconda Distribution of PythonInstalling Anaconda Distribution of Python
Installing Anaconda Distribution of Python
 
anaconda.pptx
anaconda.pptxanaconda.pptx
anaconda.pptx
 
ICT4D course 2013 - Sugar
ICT4D course 2013 - SugarICT4D course 2013 - Sugar
ICT4D course 2013 - Sugar
 
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java applicationOSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
 
The RULE project: efficient computing for all GNU/Linux users
The RULE project: efficient computing for all GNU/Linux usersThe RULE project: efficient computing for all GNU/Linux users
The RULE project: efficient computing for all GNU/Linux users
 
Effectively using Open Source with conda
Effectively using Open Source with condaEffectively using Open Source with conda
Effectively using Open Source with conda
 
Conda environment system & how to use it on CSUC machines
Conda environment system & how to use it on CSUC machinesConda environment system & how to use it on CSUC machines
Conda environment system & how to use it on CSUC machines
 
Docker Insight
Docker InsightDocker Insight
Docker Insight
 
Headless Android
Headless AndroidHeadless Android
Headless Android
 
Top 10 Anaconda Interview Questions and Answers.pptx
Top 10 Anaconda Interview Questions and Answers.pptxTop 10 Anaconda Interview Questions and Answers.pptx
Top 10 Anaconda Interview Questions and Answers.pptx
 
Data Science Workflows using Docker Containers
Data Science Workflows using Docker ContainersData Science Workflows using Docker Containers
Data Science Workflows using Docker Containers
 
Making the Move to Linux from an Enterprise Perspective
Making the Move to Linux from an Enterprise PerspectiveMaking the Move to Linux from an Enterprise Perspective
Making the Move to Linux from an Enterprise Perspective
 
nativeappdevelopmentwithpython1658264723355.pdf
nativeappdevelopmentwithpython1658264723355.pdfnativeappdevelopmentwithpython1658264723355.pdf
nativeappdevelopmentwithpython1658264723355.pdf
 
Using Docker Platform to Provide Services
Using Docker Platform to Provide ServicesUsing Docker Platform to Provide Services
Using Docker Platform to Provide Services
 
Introduction to Gnu/Linux
Introduction to Gnu/LinuxIntroduction to Gnu/Linux
Introduction to Gnu/Linux
 

Recently uploaded

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Recently uploaded (20)

Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 

Making Conda-based Reproducible Projects

  • 1. 1 © 2021 Anaconda Making Reproducible Conda-based Projects Albert DeFusco May 19, 2021
  • 2. 2 © 2021 Anaconda Agenda 1 | Reproducible Notebooks? 2 | Gathering materials 3 | Conda Environments 4 | Anaconda Project 5 | Sharing projects 6 | Demonstration
  • 3. 3 © 2021 Anaconda Jupyter notebooks everywhere
  • 4. 4 © 2021 Anaconda Are Jupyter notebooks reproducible? A Large-scale Study about Quality and Reproducibility of Jupyter Notebooks João Felipe Pimentel, Leonardo Murta, Vanessa Braganholo, Juliana Freire ● Analyzed 1 million Jupyter Notebooks on Github ○ Was the notebook readable? ○ Was the notebook named “Untitled.ipynb”? ○ Did the notebook define functions or classes? ○ Was the data provided? ○ Can the notebook be executed? http://www.ic.uff.br/~leomurta/papers/pimentel2019a.pdf
  • 5. 5 © 2021 Anaconda Are Jupyter notebooks reproducible? A Large-scale Study about Quality and Reproducibility of Jupyter Notebooks João Felipe Pimentel, Leonardo Murta, Vanessa Braganholo, Juliana Freire “out of 863,878 attempted executions of valid notebooks (i.e., notebooks with defined Python version and execution order), only 24.11% executed without errors and only 4.03% produced the same results.” http://www.ic.uff.br/~leomurta/papers/pimentel2019a.pdf
  • 6. 6 © 2021 Anaconda Gather code and data
  • 7. 7 © 2021 Anaconda Gather what you need in one directory ● Jupyter notebooks ● Script files ● data files ○ Or links to the data on the web This is not a good idea Much better!
  • 8. 8 © 2021 Anaconda Why some people don’t like Notebooks ● Cells can be run out-of-order ● Cells can be deleted ● No guarantee that the correct execution can be repeated easily
  • 9. 9 © 2021 Anaconda Recommendation: Restart and Run All Before sharing your work 1. Restart Kernel and Run All Cells 2. Fix the first error 3. Repeat Do this frequently
  • 10. 10 © 2021 Anaconda Environments
  • 11. 11 © 2021 Anaconda The Anaconda base environment ● Over 300 packages already installed ● Data Science out-of- the-box
  • 12. 12 © 2021 Anaconda Plan ahead with multiple environments ● Keep multiple package versions installed ● You can use environments to ○ Try new versions of packages ○ Install old versions of packages ○ Install only the packages you need for a project
  • 13. 13 © 2021 Anaconda Create the new environment ● On the Environment pane ○ Click Create ○ Provide a name ○ Select the Python version ● Continue to add more packages
  • 14. 14 © 2021 Anaconda Best practices ● Managing multiple environments can be challenging ● nb_conda ○ Install into your base environment and launch Jupyter ○ Access any environment where ipykernel, notebook, or jupyter has been installed ○ Every notebook will “remember” the environment that was used
  • 15. 15 © 2021 Anaconda Works with Jupyter Notebook and JupyterLab
  • 16. 16 © 2021 Anaconda Anaconda Project
  • 17. 17 © 2021 Anaconda anaconda-project ● Open-source tool that helps you make reproducible projects ● With a single YAML text file you can ○ Specify Conda and Pip packages that will be installed ○ Specify URLs to automatically download data files ○ Specify executable commands that can launch scripts, applications, or Jupyter Notebooks ● You can easily share projects as ○ Archive files (zip, tar.gz, tar.bz2) ○ Uploaded to Anaconda.org ○ Docker images
  • 18. 18 © 2021 Anaconda Install anaconda-project ● Provided with Anaconda Individual Edition ● Install or upgrade anaconda-project using ○ Anaconda Navigator ○ Conda
  • 19. 19 © 2021 Anaconda Initialize your project on the Command Line To create a new anaconda-project.yml file from scratch in your directory $ anaconda-project init $ anaconda-project add-packages package1 package2 … $ anaconda-project add-packages --pip package3 package4 ...
  • 20. 20 © 2021 Anaconda Initialize your project on the Command Line To bootstrap a project from an existing Conda environment $ conda env export --from-history environment-name > anaconda-project.yml # add more packages if needed $ anaconda-project add-packages package1 package2 … $ anaconda-project add-packages --pip package3 package4 ... Without the --from-history flag the environment will not work on all OSes
  • 21. 21 © 2021 Anaconda Runnable commands With Commands you can define how to execute your project ● Run a script or OS command ● Launch a Jupyter notebook ● Launch an application from a notebook or script. For example: ○ Bokeh or Panel dashboards ○ Flask, Django, or FastAPI web service $ anaconda-project add-command --type notebook name notebook.ipynb $ anaconda-project add-command --type unix name ‘panel serve notebook.ipynb’ $ anaconda-project add-command --type windows name ‘panel serve notebook.ipynb’
  • 22. 22 © 2021 Anaconda Locking package versions The anaconda-project.yml may now look like name: my-project packages: - python=3.8 - notebook - pandas To completely specify the package versions (including pip freeze) $ anaconda-project lock Updating locked dependencies for env spec default… Resolving conda packages for osx-64 Resolving conda packages for linux-64 Resolving conda packages for win-64
  • 23. 23 © 2021 Anaconda Multiple ways to share your project ● Create a Git repository and push to Github like any other project ● Create a Zip or Tar archive $ anaconda-project archive archive-name.zip ● Create an account on Anaconda.org and upload an archive $ anaconda-project upload ● Create a Docker image (requires anaconda-project 0.10 or greater) $ anaconda-project dockerize
  • 24. 24 © 2021 Anaconda Demonstration
  • 25. 25 © 2021 Anaconda Learn more https://anaconda-project.readthedocs.io
  • 26. 26 © 2021 Anaconda Review ● Use a new Conda environment or initialize an anaconda-project.yml file ● Gather notebooks, code, and data into one directory ● Make sure you can “Restart kernel and run all” on your notebooks ● Special features of anaconda-project ○ Lock package versions for Mac, Linux, and Windows ○ Define runnable commands ○ Easily share the project as an archive, on Anaconda.org, or Docker image