Answers: <p>A more generic approach would be use a separate virtualized environment for each project, see <a href="/questions/tagged/virtualization" class="post-tag" title="show questions tagged &#39;virtualization&#39;" rel="tag">virtualization</a>. That could be either:</p>
  
  <ul>
  <li>a container image - more lightweight, faster and definitely more popular these days, see <a href="/questions/tagged/containers" class="post-tag" title="show questions tagged &#39;containers&#39;" rel="tag">containers</a></li>
  <li>a virtual machine (VM) image, slower and a bit more heavier to maintain than containers</li>
  </ul>
  
  <p>You'd have all the project dependencies (IDEs, libraries, tools, etc) installed inside the virtualized environment, not on your system itself. </p>
  
  <p>You'd need to create/bring the project's corresponding image on your machine when you start working on it and you can delete or save it for later re-use on some external storage when done. A shared artifact respository would be recommended as storage if more than one developer can work on these projects.</p>
  
  <p>A huge advantage of this approach is that such virtualized environments play really well with automated CI/CD pipelines, in true DevOps spirit, helping to minimize/eliminate the differences between the development and staging/production environments.</p>
  
  <p>Depending on the programming language and/or the supporting development tools being used on a particular project you may have some more specific approaches/alternatives. For example <a href="https://docs.pipenv.org/" rel="nofollow noreferrer"><code>Pipenv</code></a> or <a href="https://virtualenv.pypa.io/en/stable/" rel="nofollow noreferrer">Virtualenv</a>/<a href="/questions/tagged/virtualenv" class="post-tag" title="show questions tagged &#39;virtualenv&#39;" rel="tag">virtualenv</a> can be used to obtain such isolation for Python projects. But these solutions are typically not usable in other contextes.</p>
  
Answers: CC BY-SA 3.0
Answers: 2018-04-29T17:43:30.037Z
Answers: 2018-04-29T17:43:30.037Z
Answers: Dan Cornilescu
Answers: <p><a href="http://microservices.io/" rel="nofollow noreferrer">http://microservices.io/</a></p>
  
  <p>This website explains that microservices are not the holy grail but gives an impression how it could be implemented and how it could be useful.</p>
  
  <p>Regarding the question:</p>
  
  <blockquote>
    <p>Best way to isolate programming projects?</p>
  </blockquote>
  
  <p>there is no one-size-fits-all. It depends on the goal. If your company is commercial then the most important thing is that new features while be added. So a monolith would be good first. If issues occur one could apply the cheese-slicer method and extract the problematic functions into microservices. The most important thing is to get it to the customer as soon as possible.</p>
  
Answers: CC BY-SA 3.0
Answers: 2018-04-29T15:46:55.497Z
Answers: So you do not use a Version Control System (VCS)?
Answers: 030
Answers: CC BY-SA 3.0
Answers: 2018-04-29T16:35:26.120Z
Answers: @ACKmySYN Could you include your comment in the question and remove the comment? I think that it would really help if you extend your question.
Answers: 030
Answers: CC BY-SA 3.0
Answers: 2018-04-29T14:42:43.103Z
Answers: 2018-04-29T14:50:09.833Z
Answers: 2018-04-29T14:50:09.833Z
Answers: 030
Body: <p>Not sure if this is the best place for the question but I have multiple development projects with different dependencies.. I want to know what the best practice is to isolate each project?</p>
  
  <p>I have many unrelated projects that a designed and updated on my laptop but I typically push them to a rPi or VMs (esxi). I would like to isolate the various projects so its easier to track which dependencies belong to which project and to stop the OS from having libs and other deps that aren't needed after a project is 'completed'. I do code some for work but its largely a hobby helping neighbors and the local SPCA.</p>
  
  <p>What I use:
  I typically program on a Debian box or Windows 10 depending on what I need to accomplish.
  I program in Java, Python, and the typical web stuff (jscript, html, css).. 
  Bash and Powershell if you consider either programming too.
  Version control is done via Gitlab.</p>
  
Comments: CC BY-SA 3.0
Comments: 2018-04-29T17:02:24.623Z
Comments: My understanding is that your question is about isolating the (development) environments for the projects, not about isolating the projects's codebases, is this correct?
Comments: Dan Cornilescu
Comments: CC BY-SA 3.0
Comments: 2018-04-29T17:09:25.177Z
Comments: I think that is correct, Git already isolates the code base. I want to improve my 'work flow' and reduce the amount of bloat I tend to subject my systems to. For instance I wrote some code using pyCam and after that project completed I didn't need that lib anymore, it essentially just wasted space.
Comments: blah
Comments: CC BY-SA 3.0
Comments: 2018-04-30T06:53:23.857Z
Comments: I use VMs for this - it's easy to separate and maintain specific to language and project - I just have oracle vbox with android-dev, python dev, c++ dev, etc. and then use for example python env in pycharm for specific python project for example.
Comments: Drako
Comments: CC BY-SA 3.0
Comments: 2018-05-01T19:24:22.627Z
Comments: I have workstation pro but I wanted to see if there was something out there that I didn't know about. I am not really a dev by trade.
Comments: blah
Tags: <python><java>
Title: Best way to isolate programming projects?
UserDisplayName: blah
ThreadText: # Best way to isolate programming projects?
  
  (Asked by: username_0 on 2018-04-29)
  
  Not sure if this is the best place for the question but I have multiple development projects with different dependencies.. I want to know what the best practice is to isolate each project?
  
  I have many unrelated projects that a designed and updated on my laptop but I typically push them to a rPi or VMs (esxi). I would like to isolate the various projects so its easier to track which dependencies belong to which project and to stop the OS from having libs and other deps that aren't needed after a project is 'completed'. I do code some for work but its largely a hobby helping neighbors and the local SPCA.
  
  What I use:
  I typically program on a Debian box or Windows 10 depending on what I need to accomplish.
  I program in Java, Python, and the typical web stuff (jscript, html, css)..
  Bash and Powershell if you consider either programming too.
  Version control is done via Gitlab.
  
  **Tags:** python, java
  
  > **Comments:**
  > **username_1**: My understanding is that your question is about isolating the (development) environments for the projects, not about isolating the projects's codebases, is this correct?  
  > **username_0**: I think that is correct, Git already isolates the code base. I want to improve my 'work flow' and reduce the amount of bloat I tend to subject my systems to. For instance I wrote some code using pyCam and after that project completed I didn't need that lib anymore, it essentially just wasted space.  
  > **username_2**: I use VMs for this - it's easy to separate and maintain specific to language and project - I just have oracle vbox with android-dev, python dev, c++ dev, etc. and then use for example python env in pycharm for specific python project for example.  
  > **username_0**: I have workstation pro but I wanted to see if there was something out there that I didn't know about. I am not really a dev by trade.  
  
  ---
  
  ## 2 answers
  
  ### Answer by username_1 on 2018-04-29. Score: 1 | Accepted answer
  
  A more generic approach would be use a separate virtualized environment for each project, see [virtualization](/questions/tagged/virtualization "show questions tagged 'virtualization'"). That could be either:
  
  * a container image - more lightweight, faster and definitely more popular these days, see [containers](/questions/tagged/containers "show questions tagged 'containers'")
  * a virtual machine (VM) image, slower and a bit more heavier to maintain than containers
  
  You'd have all the project dependencies (IDEs, libraries, tools, etc) installed inside the virtualized environment, not on your system itself.
  
  You'd need to create/bring the project's corresponding image on your machine when you start working on it and you can delete or save it for later re-use on some external storage when done. A shared artifact respository would be recommended as storage if more than one developer can work on these projects.
  
  A huge advantage of this approach is that such virtualized environments play really well with automated CI/CD pipelines, in true DevOps spirit, helping to minimize/eliminate the differences between the development and staging/production environments.
  
  Depending on the programming language and/or the supporting development tools being used on a particular project you may have some more specific approaches/alternatives. For example [`Pipenv`](https://docs.pipenv.org/) or [Virtualenv](https://virtualenv.pypa.io/en/stable/)/[virtualenv](/questions/tagged/virtualenv "show questions tagged 'virtualenv'") can be used to obtain such isolation for Python projects. But these solutions are typically not usable in other contextes.
  
  
  ---
  
  ### Answer by username_3 on 2018-04-29. Score: 0
  
  <http://microservices.io/>
  
  This website explains that microservices are not the holy grail but gives an impression how it could be implemented and how it could be useful.
  
  Regarding the question:
  
  > Best way to isolate programming projects?
  
  there is no one-size-fits-all. It depends on the goal. If your company is commercial then the most important thing is that new features while be added. So a monolith would be good first. If issues occur one could apply the cheese-slicer method and extract the problematic functions into microservices. The most important thing is to get it to the customer as soon as possible.
  
  > **Comments:**
  > **username_3**: So you do not use a Version Control System (VCS)?  
  > **username_3**: @ACKmySYN Could you include your comment in the question and remove the comment? I think that it would really help if you extend your question.  
  
  ---
  
  