Python doesn't have any exact equivalent to a .jar file.
There are many differences, and without knowing exactly what you want to do, it's hard to explain how to do it. But the Python Packaging User Guide does a pretty good job of explaining just about everything relevant.
Here are some of the major differences.
A .jar file is a compiled collection of classes that can be dropped into your application, or installed anywhere on your CLASSPATH.
In Python:
- A
.py(or.pyc) module can be dropped into your application, or installed anywhere on yoursys.path, and it can be imported and used. - A directory full of modules can be treated the same way; it becomes a package (or, if it doesn't contain an
__init__.py, it merges with other directories of the same name elsewhere onsys.pathinto a single package). - A
.ziparchive containing any number of modules and packages can be stored anywhere, and its path added to yoursys.path(e.g., at runtime or viaPYTHONPATH) and all of its contents become importable.
Most commonly, you want things to be installed into a system, user, or virtualenv site-packages directory. The recommended way to do that is to create a pip-compatible package distribution; people then install it (and possibly automatically download it from PyPI or a private repo) via pip.
pip does a lot more than that, however. It also allows you to manage dependencies between packages. So ideally, instead of listing a bunch of prereqs that someone has to go download and install manually, you just make them dependencies, and someone just has to pip install your-library. And it keeps track of the state of your site-packages, so you can uninstall or upgrade a package without having to track down the specific files.
Meanwhile, in Java, most .jar files are cross-platform; build once, run anywhere. A few packages have JNI native code and can't be used this way, but it's not the norm.
In Python, many packages have C extensions that have to be compiled for each platform, and even pure-Python packages often need to do some install-time configuration. And meanwhile, "compiling" pure Python doesn't do anything that can't be done just as well at runtime. So in Python, you generally distribute source packages, not compiled packages.
However, .wheel is a binary package format. You can pip wheel to build binary packages for different targets from the source package; then, if someone tries to pip install your package, if there's a wheel for his system, that will be downloaded and installed.
Python doesn't have any exact equivalent to a .jar file.
There are many differences, and without knowing exactly what you want to do, it's hard to explain how to do it. But the Python Packaging User Guide does a pretty good job of explaining just about everything relevant.
Here are some of the major differences.
A .jar file is a compiled collection of classes that can be dropped into your application, or installed anywhere on your CLASSPATH.
In Python:
- A
.py(or.pyc) module can be dropped into your application, or installed anywhere on yoursys.path, and it can be imported and used. - A directory full of modules can be treated the same way; it becomes a package (or, if it doesn't contain an
__init__.py, it merges with other directories of the same name elsewhere onsys.pathinto a single package). - A
.ziparchive containing any number of modules and packages can be stored anywhere, and its path added to yoursys.path(e.g., at runtime or viaPYTHONPATH) and all of its contents become importable.
Most commonly, you want things to be installed into a system, user, or virtualenv site-packages directory. The recommended way to do that is to create a pip-compatible package distribution; people then install it (and possibly automatically download it from PyPI or a private repo) via pip.
pip does a lot more than that, however. It also allows you to manage dependencies between packages. So ideally, instead of listing a bunch of prereqs that someone has to go download and install manually, you just make them dependencies, and someone just has to pip install your-library. And it keeps track of the state of your site-packages, so you can uninstall or upgrade a package without having to track down the specific files.
Meanwhile, in Java, most .jar files are cross-platform; build once, run anywhere. A few packages have JNI native code and can't be used this way, but it's not the norm.
In Python, many packages have C extensions that have to be compiled for each platform, and even pure-Python packages often need to do some install-time configuration. And meanwhile, "compiling" pure Python doesn't do anything that can't be done just as well at runtime. So in Python, you generally distribute source packages, not compiled packages.
However, .wheel is a binary package format. You can pip wheel to build binary packages for different targets from the source package; then, if someone tries to pip install your package, if there's a wheel for his system, that will be downloaded and installed.
Easy Install from setup_tools defines the .egg format for deploying Python libraries or applications. While similar to JAR, it is nowhere spread as universally as JARs in Java world. Many people just deploy the .py files.
A newer format, intended to supersede eggs, is wheel.
First to search for a package on PyPI
pip search <seach_string>
Example:
pip search ply | grep -i '^ply'
Output:
plyer - Platform-independant wrapper for platform-dependant APIs
plyvel - Plyvel, a fast and feature-rich Python interface to LevelDB
plywood - A template language grammar inspired by the Python code aesthetic
ply - Python Lex & Yacc
plytix-retailers-sdk - Plytix Retailers SDK for Python
plymgf - A MGF files reader with PLY
plyfile - PLY file reader/writer
plypatch - Ply: Git-based Patch Management
plyj - A Java parser written in Python using PLY.
plyr - UNKNOWN
PlyPlus - a friendly yet powerful LR-parser written in Python
Then Install the package you want:
pip install <package_name>
Example:
pip install ply
You should use instead:
pip install ply
See how to install from pip.
pip actually downloads and install the package and its dependencies, so you do not need to download the file separately.
The other option would be to download ply (or any other package) yourself, and install it yourself. In my system it was installed at:
/usr/local/lib/python2.7/dist-packages/ply
I would use subprocess this way:
import subprocess
subprocess.call(['java', '-jar', 'Blender.jar'])
But, if you have a properly configured /proc/sys/fs/binfmt_misc/jar you should be able to run the jar directly, as you wrote.
So, which is exactly the error you are getting? Please post somewhere all the output you are getting from the failed execution.
This always works for me:
from subprocess import *
def jarWrapper(*args):
process = Popen(['java', '-jar']+list(args), stdout=PIPE, stderr=PIPE)
ret = []
while process.poll() is None:
line = process.stdout.readline()
if line != '' and line.endswith('\n'):
ret.append(line[:-1])
stdout, stderr = process.communicate()
ret += stdout.split('\n')
if stderr != '':
ret += stderr.split('\n')
ret.remove('')
return ret
args = ['myJarFile.jar', 'arg1', 'arg2', 'argN'] # Any number of args to be passed to the jar file
result = jarWrapper(*args)
print result