하위가 아닌 다른 폴더에서 Python 파일 가져 오기

OuuGiii

내가 원하는 것

그래서 저는 Visual Studio 코드와 Python 3.7.0을 사용하고 있으며 다른 폴더에서 다른 Python 파일을 내 Python 파일로 가져 오려고합니다 .


세부

내 폴더 구조는 다음과 같습니다.

root/
    dir1/
        data.txt
        task11.py
        task12.py
    dir2/
        data.txt
        task21.py
        task22.py
    Helpers/
        FileHelper/
            ReadHelper.py

그래서 간단한 설명 :

  • 모든 "작업"파일에서 동일한 기능을 사용합니다.
  • 모든 "작업"파일에 함수를 넣는 대신 함수가 존재하는 도우미 파일을 만들었습니다.
  • 헬퍼 파일 "ReadHelper.py"를 작업 파일로 가져오고 싶습니다.

내가 시도한 것

예를 들어 task11.py 파일에서 :

  • from Helpers.FileHelper.ReadHelper import *
  • import os, sys
    parentPath = os.path.abspath("../../")
    if parentPath not in sys.path:
        sys.path.insert(0, parentPath)
    from Helpers.FileHelper.ReadHelper import *
    
  • import os, sys
    sys.path.append('../../')
    from Helpers.FileHelper.ReadHelper import *
    

위의 솔루션 중 어느 것도 항상 오류가 발생하므로 작동하지 않습니다. ModuleNotFoundError: No module named 'Helpers'

나는 또한 시도했다 :

  • from ..Helpers.FileHelper.ReadHelper import *

그러나 그것은 오류로 끝납니다. ValueError: attempted relative import beyond top-level package

그렇다면 파일 ReadHelper.py을 내 작업 파일로 어떻게 가져올 수 있습니까?


추신

이와 비슷한 질문이 있지만 정말 오래되었고 답변이 도움이되지 않았습니다.


업데이트 1

Visual Studio 코드에는 옵션 vscode 파이썬 명령이 있습니다.이 가져 오기와 함께이 명령을 실행하면 from Helpers.FileHelper import ReadHelper오류가 생성되지 않고 코드가 완벽하게 실행됩니다.

한 가지 단점은이 대화 형 창이 시작시 느리고 입력을 처리 할 수 ​​없다는 것입니다.

@Omni의 답변도 시도했습니다.

$> python -m root.dir1.task11

그리고 작동했습니다! 그러나 그가 말했듯이 단점은 터미널에 입력하는 것이 느리다는 것입니다.

그래서 Visual Studio Code에서 현재있는 파일에 대해 위의 셸 명령을 실행할 수있는 작업을 만들려고했지만 성공하지 못했습니다.

위의 명령을 실행하기 위해 vscode에서 작업을 생성하는 방법을 알고 있습니까?


나는 또한 __init__.py모든 디렉토리 아래 -files 를 추가하려고 시도하여 Python3 tutorial-6.4 Module Packages 패키지로 표시 됩니다. 그러나 이것은 도움이되지 않았고 동일한 오류가 발생했습니다.


업데이트 2

나는 이와 같은 폴더 구조를 갖는 것을 정말 쉽게 만들고 터미널에서 가져 오기가 올바르게 작동하도록하는 방법을 생각해 냈습니다.

기본적으로 내가 한 일은 다음과 같습니다.

  • pyhton 스크립트를 만들었습니다.
  • Visual Studio 코드에서 작업 생성

이것으로 나는 이제 단지를 눌러서 가져 오기와 함께 파이썬 파일을 실행할 수 있습니다 cmd + shift + B.


설명

Visual Studio 작업 :

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Run python file",
            "type": "shell",
            "command": "python3 /PATH_TO_ROOT_FOLDER/run_python_file.py ${file}",
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "reveal": "always",
                "panel": "new",
                "focus": true
            }
        }
    ]
}

우리가 집중하고 싶은 부분은 다음과 같습니다.

"command": "python3 /PATH_TO_ROOT_FOLDER/run_python_file.py ${file}",

  • 이 부분은 내가 만든 새로운 파이썬 파일을 루트 폴더에 실행하고 활성화 된 파일의 경로를 매개 변수로 전달합니다.

파이썬 스크립트 :

import os, sys

# This is a argument given trough a shell command
PATH_TO_MODULE_TO_RUN = sys.argv[1]

ROOT_FOLDER = "root/"

def run_module_gotten_from_shell():
    # Here I take only the part of the path that is needed
    relative_path_to_file = PATH_TO_MODULE_TO_RUN.split(ROOT_FOLDER)[1]

    # Creating the shell command I want to run
    shell_command = createShellCommand(relative_path_to_file)

    os.system(shell_command)


# Returning "python3 -m PATH.TO.MODULE"
def createShellCommand(relative_path_to_file):
    part1 = "python3"
    part2 = "-m"

    # Here I change the string "dir1/task11.py" => "dir1.task11"
    part3 = relative_path_to_file.replace("/", ".")[:-3]

    shell_command = "{:s} {:s} {:s}".format(part1, part2, part3)
    return shell_command

run_module_gotten_from_shell()
  • 이 파이썬 스크립트는 활성 파일의 경로를 매개 변수로 가져옵니다.
  • 그런 다음 경로의 쉘 명령을 생성합니다 (쉘 명령은 @ kasper-keinänen의 대답과 같습니다)
  • 그런 다음 해당 셸 명령을 실행합니다.

이러한 수정을 통해 루트 디렉터리 내의 모든 파일에서 가져 오기를 사용하여 루트 디렉터리 내의 모든 파일을 실행할 수 있습니다.

을 눌러서 할 수 있습니다 cmd + shift + B.

Kasper Keinänen

-mPython 모듈 네임 스페이스 docs.python.org를 사용하여 모듈을 찾을 수 있도록 하는 옵션으로 스크립트를 실행할 수 있습니다 .

task11.py 스크립트를 실행하면 :

$ python3 -m dir1.task11 

그리고 task11.py에서 다음과 같이 가져 오기를 수행하십시오.

from Helpers.FileHelper.ReadHelper import *

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

하위 폴더에서 주 파일 (다른 모듈이 아님) 가져 오기

분류에서Dev

상위 / 다른 폴더에서 Python 가져 오기 기능

분류에서Dev

VSCode 용 Python linter는 폴더의 다른 파일에서 가져 오기가 오류라고 생각합니다.

분류에서Dev

Python : 다른 위치에서 파일 가져 오기

분류에서Dev

Python 폴더에서 모든 파일 가져 오기 및 읽기

분류에서Dev

다른 폴더 수준에서 클래스 가져 오기-Python

분류에서Dev

Python의 특정 폴더에서 파일 가져 오기

분류에서Dev

다른 하위 폴더에서 VBA 가져 오기 특정 Excel 파일에 액세스

분류에서Dev

한 폴더에서 다른 폴더로 복사 된 모든 파일의 파일 경로 가져 오기

분류에서Dev

특정 하위 폴더에서 파일 목록 가져 오기

분류에서Dev

다른 파일 Python에서 클래스 변수 가져 오기

분류에서Dev

.pyx 파일에서 정수가 아닌 상수 가져 오기

분류에서Dev

자바 8 : 폴더 / 하위 폴더에서 파일을 가져 오기

분류에서Dev

폴더 및 하위 폴더에서 손상된 파일 목록 가져 오기

분류에서Dev

Blueprint의 정적 폴더가 아닌 루트 정적 폴더에서 정적 파일을 제공하는 Python Flask

분류에서Dev

다른 TS 파일에서 typescript 가져 오기 기능-파일이 모듈 오류가 아닙니다.

분류에서Dev

Python : exec ()를 사용하여 다른 파일에서 목록 가져 오기

분류에서Dev

.bib 파일을 .Rmd 파일이있는 폴더가 아닌 다른 폴더에 배치 할 수 있습니까?

분류에서Dev

내가 만든 저장소에서 다른 사람이 업로드 한 파일 또는 폴더 가져 오기

분류에서Dev

상위 폴더에서 파일 가져 오기

분류에서Dev

동일한 클래스가 아닌 다른 Java 클래스에서 문자열 정보 가져 오기

분류에서Dev

Android의 다운로드 폴더에서 pdf 또는 doc 파일 가져 오기

분류에서Dev

하위 폴더에서 Python 가져 오기

분류에서Dev

Python : 3이 아닌 ipywidgets.observe ()에서 단일 신호 가져 오기

분류에서Dev

Python-하위 폴더에서 대상으로 특정 파일 복사, 텍스트 파일에서 파일 이름 가져 오기

분류에서Dev

.htaccess 파일이 하위 폴더에서 작동하도록 가져 오기

분류에서Dev

Python의 다른 패키지에서 파일을 가져 오는 동안 상대 가져 오기 오류

분류에서Dev

폴더가 아닌 새 폴더의 파일에서 심볼릭 링크 만들기

분류에서Dev

하위 폴더가 아닌 상위 폴더에서 파일을 이동하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    하위 폴더에서 주 파일 (다른 모듈이 아님) 가져 오기

  2. 2

    상위 / 다른 폴더에서 Python 가져 오기 기능

  3. 3

    VSCode 용 Python linter는 폴더의 다른 파일에서 가져 오기가 오류라고 생각합니다.

  4. 4

    Python : 다른 위치에서 파일 가져 오기

  5. 5

    Python 폴더에서 모든 파일 가져 오기 및 읽기

  6. 6

    다른 폴더 수준에서 클래스 가져 오기-Python

  7. 7

    Python의 특정 폴더에서 파일 가져 오기

  8. 8

    다른 하위 폴더에서 VBA 가져 오기 특정 Excel 파일에 액세스

  9. 9

    한 폴더에서 다른 폴더로 복사 된 모든 파일의 파일 경로 가져 오기

  10. 10

    특정 하위 폴더에서 파일 목록 가져 오기

  11. 11

    다른 파일 Python에서 클래스 변수 가져 오기

  12. 12

    .pyx 파일에서 정수가 아닌 상수 가져 오기

  13. 13

    자바 8 : 폴더 / 하위 폴더에서 파일을 가져 오기

  14. 14

    폴더 및 하위 폴더에서 손상된 파일 목록 가져 오기

  15. 15

    Blueprint의 정적 폴더가 아닌 루트 정적 폴더에서 정적 파일을 제공하는 Python Flask

  16. 16

    다른 TS 파일에서 typescript 가져 오기 기능-파일이 모듈 오류가 아닙니다.

  17. 17

    Python : exec ()를 사용하여 다른 파일에서 목록 가져 오기

  18. 18

    .bib 파일을 .Rmd 파일이있는 폴더가 아닌 다른 폴더에 배치 할 수 있습니까?

  19. 19

    내가 만든 저장소에서 다른 사람이 업로드 한 파일 또는 폴더 가져 오기

  20. 20

    상위 폴더에서 파일 가져 오기

  21. 21

    동일한 클래스가 아닌 다른 Java 클래스에서 문자열 정보 가져 오기

  22. 22

    Android의 다운로드 폴더에서 pdf 또는 doc 파일 가져 오기

  23. 23

    하위 폴더에서 Python 가져 오기

  24. 24

    Python : 3이 아닌 ipywidgets.observe ()에서 단일 신호 가져 오기

  25. 25

    Python-하위 폴더에서 대상으로 특정 파일 복사, 텍스트 파일에서 파일 이름 가져 오기

  26. 26

    .htaccess 파일이 하위 폴더에서 작동하도록 가져 오기

  27. 27

    Python의 다른 패키지에서 파일을 가져 오는 동안 상대 가져 오기 오류

  28. 28

    폴더가 아닌 새 폴더의 파일에서 심볼릭 링크 만들기

  29. 29

    하위 폴더가 아닌 상위 폴더에서 파일을 이동하는 방법은 무엇입니까?

뜨겁다태그

보관