プロジェクトに別のプロジェクトで再利用したいコードがあります。これを行うには、(両方のフォルダーで) 何をする必要がありますか?
ディレクトリ構造は次のようなものです。
- フー
- プロジェクト1
- file1.py
- file2.py
- プロジェクト1
- バー
- プロジェクト2
- fileX.py
- ファイルY.py
- プロジェクト2
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について読む必要がありますが、基本的な考え方は、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 *
それからモジュールを作成し、そこから必要なものをインポートしたい場合があります。
orと doFoo
を使用して、現在の Python パスに追加できると思います。os.path.join()
os.path.append()
from import Project1.file1 import function_name