42

プロジェクトに別のプロジェクトで再利用したいコードがあります。これを行うには、(両方のフォルダーで) 何をする必要がありますか?

ディレクトリ構造は次のようなものです。

  • フー
    • プロジェクト1
      • file1.py
      • file2.py
  • バー
    • プロジェクト2
      • fileX.py
      • ファイルY.py

file1.py と file2.py の関数を fileX.py と fileY.py で使いたいです。

4

5 に答える 5

46

両方のプロジェクトがインストール可能な 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

ただし、本当の答えは、それぞれを個別のインストール可能なパッケージにすることです。

于 2013-01-24T19:42:45.540 に答える
8

ここではたくさんのことが起こっています。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 *

于 2013-01-24T19:40:14.593 に答える
5

それからモジュールを作成し、そこから必要なものをインポートしたい場合があります。

于 2013-01-24T19:32:41.683 に答える
-1

orと doFooを使用して、現在の Python パスに追加できると思います。os.path.join()os.path.append()from import Project1.file1 import function_name

于 2013-01-24T19:36:03.827 に答える