Comparison of Application Level Package Managers

I have to work with a lot (9) of different package managers at my daily work at VersionEye. Part of our mission is it to make manual updating of dependencies extinct, because it’s a manual and time consuming task which nobody enjoys. That’s why we are building a notification system for open source software libraries to make Continuous Updating easy and fun. And since we support several programming languages – 8 at this point! – I get to write crawlers and parsers for all of them. To give you a better overview over the strengths and weaknesses of these package managers, I picked the most popular one for each language and will compare them. The contenders are:

  • RubyGems / Bundler (Ruby)
  • PIP / PyPI (Python)
  • Packagist / Composer (PHP)
  • NPM (Node.JS)
  • Bower (JS, CSS, HTML)
  • CocoaPods (Objective-C)
  • Maven (Java)
  • Lein (Clojure)

Comparison Matrix

Here are the results of my comparison.

Comparison of Package Managers

You can read the complete article on the VersionEye Blog and follow the discussion on hacker news and Reddit.

Better support for PIP requirements.txt

Just pushed a new version of VersionEye online with an improved parser for requirements.txt files.

python-logo-glassy

Here are the new features:

  • It can handle comments in requirements.txt files.
  • It will ignore lines who are starting with http:// or https://.
  • It can handle entries without explicit version string.
  • Support for the pip.log file.

An entry like this here is easy:

requests==0.9.0

But now other comparators work, too. For example this here:

amqplib>=1.0.2

Or if you have only the package name. Like this:

amqplib

And the current version will also handle the pip.log file. You can just upload it or put in the URL to your pip.log file and it will show you all the dependencies in the pip.log file.

Feedback welcome.

Getting a list of all Licenses in a Project

In a regular project you are using a handfull Software Libraries. Every Library in your project can use a different license. To get a list of all licenses which are used in your project can be difficult. You can double check the license for every single library in your project manually. But that is time intensive and a pain in the ass!

VersionEye is offering a quick solution for that. You can get the license list in less than 1 minute. After your login you are in “My Projects”. Click the link “Add New Project” in the left nav bar, to create a new project.

Screen Shot 2013-02-04 at 5.40.07 PM

Simply upload a project file. A pom.xml, Gemfile, composer.json, package.json, dependency.gradle or another supported file with your dependencies. After the upload you will see a tab with all the dependencies.

Screen Shot 2013-02-04 at 5.40.53 PM

Simply click on the “License” tab to see all licenses in this project. And here it is.

Screen Shot 2013-02-04 at 5.41.17 PM

In this example most Libraries are using the MIT License. Some of them are under “Ruby” license and for 1 Library VersionEye was not able to detect a license.

It’s that simple. Let me know if you have questions to this.

Python MeetUp – How Web Frameworks interprets the URL – Python 3

On Wednesday I went to the Python MeetUp in San Francisco. The topic was

Learn about logging, how web framework interprets the URL, and Python 3

Here is the MeetUp Event for that: http://www.meetup.com/sfpython/events/58588062/

The event was hosted by Yelp.com. They have a pretty cool office, with a big kitchen and lot of Pizza …

and beer. The iPad shows you how full your cap is 🙂

They have a kicker

and a table tennis in the office.

And a good view to SOMA

We heared 2 talks at this evening. The last one was about Python 3.

I am not a Python guy. But I am interested in Python. I just switchen over from Java to Ruby. Why not learn Python, too 🙂

The first talk was about how Web Frameworks are working. Ben Bangert talked about Dispatcher in general and showed also some Python code.

For me as outsider Python looks very similar to Ruby. But I saw also some stuff I know from Java. For example Annotations. That looks in Python exactly the same as in Java.

Maybe I should give it a try and learn Python.