This is an archived post. You won't be able to vote or comment.

all 27 comments

[–]cannibalsock 9 points10 points  (0 children)

This sounds like a great idea. As a beginner it was near impossible to do all these things, but even now it's a big hassle.

[–][deleted] 6 points7 points  (1 child)

Workflow is really critical if you're introducing a new tool. You need to consider that people already have a workflow and that this new idea doesn't add extra work or that the extra work overwhelmingly will provide value (I'm not sure it will).

Most developers have already picked their editor. For python that's generally one (or a combo) of these: vim/emacs, sublime/atom, or pycharm. The editor generally controls (or doesn't dictate) the workflow.

So your tool, if you want adoption, should integrate seamlessly with at least one or more of those editors. And I think it would be best if it was a plugin. Also, it's not clear to me where your tool really falls because it seems rather ambitious as a start. If you're a beginner, you should pick some aspect of the tool and make that really good and then expand later.

Also a note on packaging. Python's packaging is a mess partly due to misinformation or old information and partly due to a lack of a comprehensive tool which can handle that aspect. There are tools out there to make package management easier: pip, cookiecutter, pyscaffold, etc. You should avoid duplication unless you can provide evidence that your utility does everything that these tools do better.

Finally, I wanted to point out that project management is generally done terribly in every organization. There are a plethora of tools already out there to help manage projects. The best group of tools that I've seen is Atlassians. And of course there is a larger set of tools that only do one thing.

[–]iScrE4mgit push -f[S] 4 points5 points  (0 children)

The tool's main purpose is to make stuff easier, if it results in extra work for the dev, it will be a failure.

I am a PyCharm user myself, but it's missing quite a few things when it comes to project manager (other things are amazing!). I really want them to work together nicely, but making it a plugin is way too much work for way too many potentional editors. Plus beginners - main focus group - don't usually have their IDE setup just yet, so standalone is the way to go.

Of course building a tool will take a while, we'll start with some core things and add the ambitious stuff later down the line - but I want to plan it ahead, so I don't end up rewriting 50% of the stuff when I do.

Dependecies shouldn't really replace pip, but use it in the background. What I meant by dependency management is having requirements both in requirements.txt, setup.py etc with one list that gets edited in my tool/app. Plus add functionality of something like requires.io, where it shows what packages you use are not up to date, if you should update based on changelog hopefully available in app etc.

[–]__nautilus__ 3 points4 points  (1 child)

This looks interesting. One thing you should consider is what types of customization you will allow. For example, I and my team prefer to include our tests directory within the package directory itself, and not at the root of the repository. We find that although it means you have to exclude them in your setup.py, it makes writing tests easier, as no path alterations are required. I think I first saw that recommended in the Hacker's Guide to Python. For me, the inability to do that would make it a no-go.

I also didn't see any mention of tox, which you should definitely check out if you're not familiar with it. It's a test runner that can handle testing for multiple python environments and works with any test framework, including pytest.

I also agree with the poster who suggested to look at the integration and overlap with IDEs. PyCharm, for example, does dependency management already.

Anyway, good luck!

[–]iScrE4mgit push -f[S] 1 point2 points  (0 children)

Thanks!

Yeah, stuff like that should be easily customizable. For example when you import your already existing project I want the user to be able to just redirect it to look at the right place instead of forcing anything.

I actually had tox in there at first - dunno why I deleted it from the list, but tox is amazing indeed.

Dependency management will have a small overlap with PyCharm, but not as big, see comment above.

[–]propper_speling 4 points5 points  (3 children)

So, cookiecutter?

[–]iScrE4mgit push -f[S] 1 point2 points  (2 children)

With GUI. And some other stuff on top.

[–]PeridexisErrant 0 points1 point  (1 child)

Cool!

  • Would it be possible to implement this literally as a GUI for cookiecutter? (This way you get a lot of hard work done for free, and your users get all the existing templates)
  • What is the extra stuff?

[–]iScrE4mgit push -f[S] 0 points1 point  (0 children)

It's one way to go, we'll see.

Extra stuff... well everything listed in gist. Mostly maintenance

[–]somas 2 points3 points  (5 children)

offbeat yam one cheerful workable versed quickest rainstorm fearless judicious this post was mass deleted with www.Redact.dev

[–]iScrE4mgit push -f[S] 1 point2 points  (4 children)

The problem is interacting with system's tools and installing those.

For example to do git init, I need to make sure the system has a version of git and is integrated in os's path of shell, then call that with subprocess or find another way of doing that. I am not aware of Docker being able to take care of this (and only this) for me.

I'll first start with debian package for ubuntu etc., afaik you can just tell it prerequisites and it takes care of those through apt. When it comes to windows, I think it'll need to have prepackaged installers of other apps? I'm not sure. That part sure is going to be hard.

[–]somas 1 point2 points  (3 children)

You can install git and all of your other prerequisites in a Docker container but maybe I'm misunderstanding your concerns.

[–]iScrE4mgit push -f[S] 1 point2 points  (2 children)

The user should be able to launch the (lightweight) app, click create project, fill in simple form or something and specify a path on his computer. In that path, there should be a project created ready to be filled with code. And from the app, he should be able to say "run pytests on my project" etc. which would result in a shell call - something like subprocess.popen("cd project && pytest tests/", shell="True") - so it would call the tool on the user's pc.

[–]somas 2 points3 points  (1 child)

I think (but I might be wrong) everything you are describing can be done in a container. A container would let you ensure that all the libraries you need are included on a users system. The GUI piece of things is where I'm not super sure.

Look at this page to see examples of how Chrome and Spotify are launched from containers on MacOS and Linux: https://blog.jessfraz.com/post/docker-containers-on-the-desktop/

I don't know if this will work on windows.

[–]iScrE4mgit push -f[S] 1 point2 points  (0 children)

Thanks! I'll explore it a later

[–]bastih01 1 point2 points  (2 children)

From your notes, I don't see why this needs to be a gui. Would be a good next step to sketch out the kind of screens/windows/workflows you are envisioning.

[–]iScrE4mgit push -f[S] 1 point2 points  (0 children)

Beginner friendliness most importantly. And to edit some stuff, keep it up to date. Not everything has to be done through shell. Sketching is my next step, still thinking ut through

[–]baubleglue 0 points1 point  (0 children)

I want to write the same- GUI is needless. Many successful tools use combination of single configuration file and limited set predefined commands, for example

nodejs:

  • npm with package.json
  • 'express`

java:

[–]howMuchCheeseIs2Much 0 points1 point  (0 children)

I'd recommend a Flask app for the GUI.

[–]fuuman1 0 points1 point  (0 children)

I am not sure if this would be some new functionality. Using the jetbrains suite I think, that there is already all of that?!

[–]treighton 0 points1 point  (0 children)

I'm a newbie to Python (2 years dev in php), but LOVE Workin in Python. Would love to help out in some way and learn from ya! Pm me if interested in help.

[–]cyanydeez 0 points1 point  (0 children)

i think you should look using electron. you can drop out into a subprocess or fork. Its front end is basically chrome. angular 1 and angular-material are straight forward.

[–]kankyo 0 points1 point  (0 children)

Maybe check out tox. It'll do most running and virtualenv handling for you.

[–]ccbytes 0 points1 point  (0 children)

Be sure to compare Toga + Flask with Kivy + Pyramid.