[英]Python: How to import a function from a package that depends on other functions in that package?
[英]How to import functions from other projects in Python?
我在一個項目中有一些代碼,我想在另一個項目中重用。 我需要做什么(在兩個文件夾中)才能做到這一點?
目錄結構類似於:
我想在fileX.py 和fileY.py 中使用file1.py 和file2.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但基本思想是 fileX 需要知道 file1 和 file2 在哪里才能使用它們。
要將文件夾變成包,它只需要包含一個__init__.py
文件。 我建議你做的是(在終端中)
$ touch Foo/__init__.py
$ touch Foo/Project1/__init__.py
(假設您使用的是 unix/linux)。
然后不知何故,fileX 需要知道Foo
包在哪里。 您可以調用sys.path.append(PATH)
,其中 PATH 是 Foo 的位置。
最后在 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 *
是非常不受歡迎的,因為它混合了名稱並使代碼更難閱讀和理解
您可能想從中制作一個模塊,然后從中導入您需要的任何內容。
我認為您可以使用os.path.join()
或os.path.append()
將Foo
添加到當前的 Python 路徑,並執行from import Project1.file1 import function_name
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.