如何从Python中的其他项目导入函数?

Big*_*ogg 19 python import

我在项目中有一些代码,我想在另一个项目中重用.我需要做什么(在两个文件夹中),以便我可以这样做?

目录结构类似于:

    • PROJECT1
      • file1.py
      • file2.py
  • 酒吧
    • 项目2
      • fileX.py
      • fileY.py

我想在fileX.py和fileY.py中使用file1.py和file2.py中的函数.

Rob*_*wie 29

理想情况下,两个项目都是一个可安装的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
Run Code Online (Sandbox Code Playgroud)

然而,真正的答案是使每个都成为一个独立的可安装包.

  • Project1 和 Project2 都位于我的服务器上,并且都受版本控制。如果 Project1 更新了,那么我每次都必须在 project2 上更新已安装的软件包。但是,如果我操纵 sys.path,只需对 Project1 执行 git pull 就会更新我的模块。我是不是做了什么有臭味的事?或者说做一下也没关系!谢谢! (4认同)

msc*_*msc 5

您可能希望从中创建一个模块,然后从中导入所需的任何内容.


Rya*_*ing 5

这里有很多事情要做.你应该阅读python包和模块管理http://docs.python.org/2/tutorial/modules.html#packages,但基本的想法是fileX需要知道file1和file2的位置才能使用它们.

要将文件夹转换为包,它只需要包含一个__init__.py文件.我建议你做的是(在一个终端)

$ touch Foo/__init__.py
$ touch Foo/Project1/__init__.py
Run Code Online (Sandbox Code Playgroud)

(假设你使用的是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)
Run Code Online (Sandbox Code Playgroud)

如果你真的想在function_name没有前面的情况下说,file1.你可以通过说明导入它的所有功能from Foo.Project1.file1 import *注意,因为它混合了名称并使代码不易读和易懂,from module import *所以非常不满意