npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

virtualenv

v0.3.1

Published

install and use Python dependencies in node with virtualenv

Downloads

136

Readme

node-virtualenv

node-virtualenv enables Python dependencies in your node projects, without cluttering up the system environment.

For example, let's add Skype4Py as a dependency to a project. In the package.json, add 2 things:

  1. Dependency on virtualenv (this library)
  2. Postinstall to prepare the virtualenv every time your module is npm installed.
{
  "dependencies": {
    "virtualenv": "*"
  },
  "scripts": {
    "postinstall": "virtualenv-postinstall"
  }
}

Next, make a requirements.txt in the same directory as package.json, containing this line:

Skype4Py==1.0.35

When you run npm install, the Skype4Py dependency will be isolated in a virtualenv located under .node-virtualenv.

Next, spawn your isolated Python virtualenv from node:

var virtualenv = require("virtualenv");
var packagePath = require.resolve("./package.json")
var env = virtualenv(packagePath);

// This is a child_process running Python using your virtualenv. You can
// communicate with it over stdin/stdout, etc.
var child = env.spawnPython(["./my_python_helper.py"]);

You can also spawn any of the other commands in the virtualenv. For example, if you added a Python tool like fabric as a dependency, you can access the command fab that it installs:

var virtualenv = require("virtualenv");
var packagePath = require.resolve("./package.json")
var env = virtualenv(packagePath);

// This is a child_process running fabric using your virtualenv.
var child = env.spawn("fab", ["deploy", "-H", "example1.net,example2.net"]);

Advanced usage

You can modify the way the virtualenv is created during postinstall. For example, if your node module still functions without the Python extras, you can make virtualenv optional (in case the user doesn't have Python). Do this by adding a "virtualenv" key to your package.json:

  "virtualenv": {
    "optional": true
  }

Depend on a specific version of virtualenv:

  "virtualenv": {
    "version": "15.0.x"
  }

Send flags to the virtualenv creation command:

  "virtualenv": {
    "flags": [
      "--system-site-packages"
    ]
  }

Launch virtualenv.py using a specific python interpreter

  "virtualenv": {
    "python": "/path/to/my/python"
  }

References

Contributing

Just make a pull request :)