I have some code in a project which I'd like to reuse in another project. What do I need to do (in both folders) so that I can do this?
The directory structure is something like:
- Foo
- Project1
- file1.py
- file2.py
- Project1
- Bar
- Project2
- fileX.py
- fileY.py
- Project2
I want to use functions from file1.py and file2.py in fileX.py and fileY.py.
Ideally both projects will be an installable python package, replete with __init__.py and setup.py. They could then be installed with
python setup.py install
or similar.If that is not possible, don't use
execfile()
! Manipulate thePYTHONPATH
to addFoo
so thatimport Project1.file1
works.For example, from Project2/fileX.py:
However, the real answer is to make each a discrete installable package.
I think you can add
Foo
to the current Python path usingos.path.join()
oros.path.append()
and dofrom import Project1.file1 import function_name
.There's a lot going on here. you should read about python packages and module management http://docs.python.org/2/tutorial/modules.html#packages but the basic idea is that fileX needs to know where file1 and file2 are in order to use them.
To turn a folder into a package, it just needs to contain an
__init__.py
file. What I would suggest you do is (in a terminal)(assuming you're using unix/linux).
Then somehow, fileX needs to know where the
Foo
package is. You can callsys.path.append(PATH)
where PATH is the location of Foo.finally inside fileX.py you'd have
if you really want to just say
function_name
without the preceedingfile1.
you can import all of its functions by sayingfrom Foo.Project1.file1 import *
however please note thatfrom module import *
is highly frowned upon as it mixes names and make code less readable and understandableYou take the code you want to use in both projects, and you put it into a module, which you extract into a third separate project. That project you make into a package, which you can work on separately. You then release version of it, and reuse them in your other projects.
It is important that you have versions that you "release" so that you can keep track of which version of the module each project uses. Otherwise you will end up in a situation where an old project stops working because you have made incompatible changes to the common module.
If it's generically usable not only for you but for others, consider uploading it to PyPI.
You may want to make a module out of it and then import whatever you need from it.