다른 파이썬 파일을 가져 오는 방법? 오려면 어떻게해야합니까? 사용자 입력을 기반으로 런타임에

파이썬에서 다른 파일을 어떻게 가져 옵니까?

  1. 정확히 같은 파이썬 파일을 어떻게 가져올 수 import file.py있습니까?
  2. 특정 파일 대신 폴더를 가져 오려면 어떻게해야합니까?
  3. 사용자 입력을 기반으로 런타임에 Python 파일을 동적으로로드하고 싶습니다.
  4. 파일에서 하나의 특정 부분 만로드하는 방법을 알고 싶습니다.

예를 들어, main.py나는 가지고있다 :

from extra import * 

이것은의 모든 정의를 제공하지만 extra.py어쩌면 내가 원하는 것은 단일 정의 일뿐입니다.

def gap():
    print
    print

나는 어떻게 추가합니까 import단지 수에 문 gap에서 extra.py?



답변

importlib프로그래밍 방식으로 모듈을 가져 오기 위해 Python 3에 추가되었습니다. 그냥 래퍼 일뿐 입니다. 문서를__import__ 참조하십시오 .

import importlib

moduleName = input('Enter module name:')
importlib.import_module(moduleName)

참고 :에서 .py확장자를 제거해야합니다 moduleName. 이 함수는 또한 package상대적 가져 오기에 대한 인수를 정의합니다 .


업데이트 : 아래 답변이 오래되었습니다 . 위의 최신 대안을 사용하십시오.

  1. 그냥 import file‘평’확장자없이.

  2. 이라는 빈 파일을 추가하여 폴더를 패키지로 표시 할 수 있습니다 __init__.py.

  3. __import__기능을 사용할 수 있습니다 . 모듈 이름을 문자열로 사용합니다. (다시 : ‘.py’확장자가없는 모듈 이름)

    pmName = input('Enter module name:')
    pm = __import__(pmName)
    print(dir(pm))
    

    help(__import__)자세한 내용을 입력 하십시오.


답변

파이썬 파일을 가져 오는 방법에는 여러 가지가 있으며 모두 장단점이 있습니다.

자신에게 적합한 첫 번째 가져 오기 전략을 서둘러 선택하지 마십시오. 그렇지 않으면 나중에 필요에 맞지 않을 때 코드베이스를 다시 작성해야합니다.

가장 쉬운 예 # 1을 설명하고 가장 전문적이고 강력한 예 # 7로 넘어가겠습니다.

예제 1, 파이썬 인터프리터로 파이썬 모듈 가져 오기 :

  1. 이것을 /home/el/foo/fox.py에 넣으십시오.

    def what_does_the_fox_say():
      print("vixens cry")
  2. 파이썬 인터프리터에 들어가십시오.

    el@apollo:/home/el/foo$ python
    Python 2.7.3 (default, Sep 26 2013, 20:03:06)
    >>> import fox
    >>> fox.what_does_the_fox_say()
    vixens cry
    >>> 

    python 인터프리터를 통해 fox를 가져 what_does_the_fox_say()오고 fox.py 내 에서 python 함수 를 호출했습니다.

예제 2, 스크립트 에서execfile 또는 ( execPython 3 )를 사용 하여 다른 파이썬 파일을 제 위치에서 실행하십시오.

  1. 이것을 /home/el/foo2/mylib.py에 넣으십시오.

    def moobar():
      print("hi")
  2. 이것을 /home/el/foo2/main.py에 넣으십시오.

    execfile("/home/el/foo2/mylib.py")
    moobar()
  3. 파일을 실행하십시오.

    el@apollo:/home/el/foo$ python main.py
    hi

    함수 moobar는 mylib.py에서 가져와 main.py에서 사용할 수있게되었습니다.

예제 3, …에서 가져 오기 … 기능 :

  1. 이것을 /home/el/foo3/chekov.py에 넣으십시오.

    def question():
      print "where are the nuclear wessels?"
  2. 이것을 /home/el/foo3/main.py에 넣으십시오.

    from chekov import question
    question()
  3. 다음과 같이 실행하십시오.

    el@apollo:/home/el/foo3$ python main.py
    where are the nuclear wessels?

    chekov.py에서 다른 기능을 정의한 경우, 다른 기능을 사용하지 않으면 사용할 수 없습니다 import *

예 4, riaa.py를 가져 오는 위치와 다른 파일 위치에있는 경우 가져 오기

  1. 이것을 /home/el/foo4/stuff/riaa.py에 넣으십시오.

    def watchout():
      print "computers are transforming into a noose and a yoke for humans"
  2. 이것을 /home/el/foo4/main.py에 넣으십시오.

    import sys
    import os
    sys.path.append(os.path.abspath("/home/el/foo4/stuff"))
    from riaa import *
    watchout()
  3. 그것을 실행 :

    el@apollo:/home/el/foo4$ python main.py
    computers are transforming into a noose and a yoke for humans

    외부 파일의 모든 것을 다른 디렉토리에서 가져옵니다.

예 5, 사용 os.system("python yourfile.py")

import os
os.system("python yourfile.py")

예제 6, python startuphook 피기 백을 통해 파일을 가져옵니다.

업데이트 : 이 예제는 python2와 3 모두에서 작동했지만 python2에서만 작동합니다. python3은이 사용자 startuphook 기능 세트를 제거했습니다.이 기능은 기술이 부족한 python 라이브러리 작성자에 의해 악용되어 모든 사용자 정의 프로그램 이전에 코드를 전역 네임 스페이스에 무례하게 삽입하는 데 사용되었습니다. 이것이 python3에서 작동하려면 더 창의력을 가져야합니다. 내가 그것을하는 방법을 알려 주면, 파이썬 개발자는 그 기능 세트도 비활성화 할 것이므로 스스로해야합니다.

참조 : https://docs.python.org/2/library/user.html

이 코드를 홈 디렉토리에 넣으십시오. ~/.pythonrc.py

class secretclass:
    def secretmessage(cls, myarg):
        return myarg + " is if.. up in the sky, the sky"
    secretmessage = classmethod( secretmessage )

    def skycake(cls):
        return "cookie and sky pie people can't go up and "
    skycake = classmethod( skycake )

이 코드를 main.py에 넣으십시오 (어디서나 가능) :

import user
msg = "The only way skycake tates good"
msg = user.secretclass.secretmessage(msg)
msg += user.secretclass.skycake()
print(msg + " have the sky pie! SKYCAKE!")

그것을 실행하면 다음을 얻을 수 있습니다.

$ python main.py
The only way skycake tates good is if.. up in the sky,
the skycookie and sky pie people can't go up and  have the sky pie!
SKYCAKE!

여기에 오류가 발생 ModuleNotFoundError: No module named 'user'하면 python3을 사용한다는 의미이며 기본적으로 startuphooks가 비활성화되어 있습니다.

이 jist의 크레딧은 https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py 입니다. 보트를 따라 보내십시오.

예제 7, 가장 강력한 방법 : bare import 명령을 사용하여 파이썬으로 파일을 가져옵니다.

  1. 새 디렉토리를 만드십시오 /home/el/foo5/
  2. 새 디렉토리를 만드십시오 /home/el/foo5/herp
  3. __init__.pyherp 아래에 빈 파일을 만듭니다 .

    el@apollo:/home/el/foo5/herp$ touch __init__.py
    el@apollo:/home/el/foo5/herp$ ls
    __init__.py
  4. / home / el / foo5 / herp / derp 디렉토리를 새로 만드십시오

  5. derp에서 다른 __init__.py파일을 만듭니다 .

    el@apollo:/home/el/foo5/herp/derp$ touch __init__.py
    el@apollo:/home/el/foo5/herp/derp$ ls
    __init__.py
  6. / home / el / foo5 / herp / derp 아래에 yolo.pyPut this 라는 새 파일을 작성하십시오 .

    def skycake():
      print "SkyCake evolves to stay just beyond the cognitive reach of " +
      "the bulk of men. SKYCAKE!!"
  7. 진실의 순간, 새 파일을 만들고, /home/el/foo5/main.py거기에 넣으 십시오 .

    from herp.derp.yolo import skycake
    skycake()
  8. 그것을 실행 :

    el@apollo:/home/el/foo5$ python main.py
    SkyCake evolves to stay just beyond the cognitive reach of the bulk
    of men. SKYCAKE!!

    __init__.py파일은 개발자가이 디렉토리를 가져 오기 가능한 패키지로 만들고자하는 파이썬 인터프리터와 통신합니다.

디렉토리 아래에 모든 .py 파일을 포함시키는 방법에 대한 내 게시물을 보려면 https://stackoverflow.com/a/20753073/445131을 참조하십시오.


답변

알려진 런타임 이름으로 ‘런타임’에 특정 Python 파일을 가져 오려면 :

import os
import sys

scriptpath = "../Test/"

# Add the directory containing your module to the Python path (wants absolute paths)
sys.path.append(os.path.abspath(scriptpath))

# Do the import
import MyModule


답변

한 폴더에서 다른 폴더로 파이썬 파일을 가져 오는 복잡한 방법은 많지 않습니다. 그냥 만들 __init__.py 이 폴더는 파이썬 패키지 선언하고 다음 방금 유형을 가져올 경우 호스트 파일에 가서 파일을

from root.parent.folder.file import variable, class, whatever


답변

문서 가져 오기 ..- 참조 링크

__init__.py파일이 패키지를 포함하는 것으로 파이썬 치료를 디렉토리를 만들기 위해 필요, 이것은 의도하지 않게 모듈 검색 경로에 이상이 발생 유효한 모듈을 숨기고에서, 같은 문자열로 공통 이름을 가진 디렉토리를 방지하기위한 것입니다.

__init__.py빈 파일 일 수도 있지만 패키지의 초기화 코드를 실행하거나 __all__변수를 설정할 수도 있습니다.

mydir/spam/__init__.py
mydir/spam/module.py
import spam.module
or
from spam import module


답변

첫 번째 경우 : file A.py에서 file 을 가져 오려면 B.py이 두 파일이 다음과 같은 동일한 폴더에 있습니다.

.
├── A.py
└── B.py

파일 에서이 작업을 수행 할 수 있습니다 B.py:

import A

또는

from A import *

또는

from A import THINGS_YOU_WANT_TO_IMPORT_IN_A

그러면 파일 A.py에서 파일 의 모든 기능을 사용할 수 있습니다B.py


두 번째 경우 : file folder/A.py에서 file 을 가져 오려면 B.py이 두 파일이 다음과 같은 동일한 폴더에 있지 않습니다.

.
├── B.py
└── folder
     └── A.py

파일 B에서이를 수행 할 수 있습니다.

import folder.A

또는

from folder.A import *

또는

from folder.A import THINGS_YOU_WANT_TO_IMPORT_IN_A

그러면 파일 A.py에서 파일 의 모든 기능을 사용할 수 있습니다B.py


요약 : 첫 번째 경우 file A.py은 file B.py에서 가져 오는 모듈이며 구문을 사용했습니다 import module_name. 두 번째 경우 folder에는 모듈을 포함하는 패키지이며 A.py구문을 사용했습니다 import package_name.module_name.

패키지 및 모듈에 대한 자세한 내용은이 링크를 참조하십시오 .


답변

from file import function_name  ######## Importing specific function
function_name()                 ######## Calling function

import file              ######## Importing whole package
file.function1_name()    ######## Calling function
file.function2_name()    ######## Calling function

다음은 내가 지금 이해 한 간단한 두 가지 방법이며 라이브러리로 가져 오려는 “file.py”파일이 현재 디렉토리에만 있는지 확인하십시오.