我有我想在另一个项目中重用其中一个项目的一些代码。 我需要做什么做的(这两个文件夹),这样我可以做到这一点?
目录结构是这样的:
- 富
- PROJECT1
- file1.py
- file2.py
- PROJECT1
- 酒吧
- 项目2
- fileX.py
- fileY.py
- 项目2
我想用从file1.py和file2.py功能fileX.py和fileY.py。
我有我想在另一个项目中重用其中一个项目的一些代码。 我需要做什么做的(这两个文件夹),这样我可以做到这一点?
目录结构是这样的:
我想用从file1.py和file2.py功能fileX.py和fileY.py。
理想的情况是这两个项目将是一个安装Python包,充满了__init__.py和setup.py。 他们然后可以安装python setup.py install
或相似。
如果这是不可能的, 不使用execfile()
操纵PYTHONPATH
加Foo
,使import Project1.file1
工作。
例如,从Project2中/ fileX.py:
from os import path
import sys
sys.path.append(path.abspath('../Foo'))
from Project1.file1 import something
然而, 真正的答案是让每一个独立安装包。
你可能想使一个模块出来的,然后汇入你从它需要的任何。
有很多怎么回事。 你应该阅读有关Python包和模块管理http://docs.python.org/2/tutorial/modules.html#packages但其基本思想是,文件X需要知道文件1和文件2是为了使用它们。
要打开一个文件夹成一个包,它只是需要包含__init__.py
文件。 我会建议你做的是(在终端)
$ touch Foo/__init__.py
$ touch Foo/Project1/__init__.py
(假设你使用的Unix / Linux)。
后来不知怎的,文件X需要知道的Foo
包。 您可以拨打sys.path.append(PATH)
其中path是富的位置。
终于里面fileX.py你必须
import sys
sys.path.append(PATH) #replace PATH with the path to Foo
from Foo.Project1 import file1
#use its functions
file1.function_name(argument)
如果你真的只想说function_name
没有前述file1.
你可以这样导入它的所有功能from Foo.Project1.file1 import *
但是请注意, from module import *
高度时,因为它混合名字皱了皱眉,使代码的可读性和可理解
你把你想在这两个项目中使用的代码,你把它变成一个模块 ,您提取到第三个单独的项目。 该项目您制作成包,你可以独立工作的。 然后,释放它的版本,并在其他项目中重用他们。
重要的是,你有你“释放”,这样就可以跟踪哪个版本的每个项目采用模块的版本。 否则,你将在一个旧的项目停止工作,因为你已经做出了共同的模块不兼容的改变的情况下结束。
如果不是只为你,但别人一般可用,可以考虑将其上传到PyPI中 。
我想你可以添加Foo
利用当前的Python的路径os.path.join()
或os.path.append()
做from import Project1.file1 import function_name
。