하위 디렉토리에서 파일을 가져오시겠습니까?
라는 파일이 있습니다.tester.py, 에 있습니다./project.
/project라는 서브디렉토리가 있습니다.lib, 라고 하는 파일이 있습니다.BoxTime.py:
/project/tester.py
/project/lib/BoxTime.py
Import하고 싶다BoxTime부터tester이거 해봤어요.
import lib.BoxTime
그 결과:
Traceback (most recent call last):
File "./tester.py", line 3, in <module>
import lib.BoxTime
ImportError: No module named lib.BoxTime
Import 방법BoxTime서브디렉토리에서요?
편집
그__init__.py문제가 되었지만, 잊지 말고BoxTime~하듯이lib.BoxTime또는 다음을 사용합니다.
import lib.BoxTime as BT
...
BT.bt_function()
패키지 매뉴얼(섹션 6.4)을 참조하십시오.
즉, 이름 있는 빈 파일을 넣어야 합니다.
__init__.py
에서lib디렉토리로 이동합니다.
- 다음 이름의 하위 디렉토리를 만듭니다.
lib. - 다음 이름의 빈 파일 생성
lib\__init__.py. 인
lib\BoxTime.py, 함수를 씁니다.foo()다음과 같습니다.def foo(): print "foo!"위 디렉토리의 클라이언트 코드
lib, 쓰기:from lib import BoxTime BoxTime.foo()클라이언트 코드를 실행합니다.다음과 같은 이점을 얻을 수 있습니다.
foo!
한참 후 Linux에서는 다음과 같이 됩니다.
% cd ~/tmp
% mkdir lib
% touch lib/__init__.py
% cat > lib/BoxTime.py << EOF
heredoc> def foo():
heredoc> print "foo!"
heredoc> EOF
% tree lib
lib
├── BoxTime.py
└── __init__.py
0 directories, 2 files
% python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from lib import BoxTime
>>> BoxTime.foo()
foo!
에 삽입해 보세요.sys.path:
sys.path.insert(0, './lib')
import BoxTime
모든 사람들이 당신이 이 프로그램을 만들어야 한다고 제안하고 있는 것 같아서 이것을 적습니다.lib디렉토리로 이동합니다.
하위 디렉토리의 이름을 지정할 필요가 없습니다.lib이름을 대보세요.anything를 입력해 주세요.__init__.py그 안에.
이를 수행하려면 Linux 쉘에서 다음 명령을 입력합니다.
$ touch anything/__init__.py
이제 다음과 같은 구조를 갖게 되었습니다.
$ ls anything/
__init__.py
mylib.py
$ ls
main.py
그러면 Import할 수 있습니다.mylib안으로main.py다음과 같습니다.
from anything import mylib
mylib.myfun()
다음과 같은 함수 및 클래스를 가져올 수도 있습니다.
from anything.mylib import MyClass
from anything.mylib import myfun
instance = MyClass()
result = myfun()
내부에 배치하는 모든 변수 함수 또는 클래스__init__.py에도 액세스 할 수 있습니다.
import anything
print(anything.myvar)
또는 다음과 같이 합니다.
from anything import myvar
print(myvar)
해라import .lib.BoxTimePEP 328의 상대적인 Import에 대한 자세한 내용은 를 참조하십시오.
lib 디렉토리에는__init__.py파일링?
Python은__init__.py디렉토리가 모듈인지 여부를 판별합니다.
전체 예시 포함
이는 기본적으로 모든 케이스에 해당됩니다(고객님이__init__.pyrelative/path/to/your/lib/folder:
import sys, os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/relative/path/to/your/lib/folder")
import someFileNameWhichIsInTheFolder
...
somefile.foo()
예:
프로젝트 폴더에 다음 항목이 있습니다.
/root/myproject/app.py
다른 프로젝트 폴더에 있습니다.
/root/anotherproject/utils.py
/root/anotherproject/__init__.py
사용하고 싶다/root/anotherproject/utils.py그 안에 있는 foo 함수를 호출합니다.
앱에 글을 쓰는군요.py:
import sys, os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../anotherproject")
import utils
utils.foo()
빈 파일 만들기__init__.py서브디렉토리 /lib에 있습니다.그리고 메인 코드의 선두에 추가한다.
from __future__ import absolute_import
그리고나서
import lib.BoxTime as BT
...
BT.bt_function()
혹은 그 이상
from lib.BoxTime import bt_function
...
bt_function()
이 답변들에 대한 추가 사항입니다.
모든 하위 디렉터리에서 모든 파일을 가져오려면 이 파일을 파일의 루트에 추가할 수 있습니다.
import sys, os
sys.path.extend([f'./{name}' for name in os.listdir(".") if os.path.isdir(name)])
그런 다음 하위 디렉토리에서 파일을 가져올 수 있습니다. 이 파일이 현재 디렉토리 내에 있는 것처럼 말이죠.
작업 예
내 프로젝트에 하위 디렉토리가 있는 다음 디렉토리가 있는 경우...
.
├── a.py
├── b.py
├── c.py
├── subdirectory_a
│ ├── d.py
│ └── e.py
├── subdirectory_b
│ └── f.py
├── subdirectory_c
│ └── g.py
└── subdirectory_d
└── h.py
나는 내 안에 다음 코드를 넣을 수 있다.a.py
import sys, os
sys.path.extend([f'./{name}' for name in os.listdir(".") if os.path.isdir(name)])
# And then you can import files just as if these files are inside the current directory
import b
import c
import d
import e
import f
import g
import h
즉, 이 코드는, 파일의 송신원디렉토리를 추상화합니다.
이 폴더 계층 다이어그램의 예:
/project/tester.py
/project/lib/BoxTime.py
파일을 1- py py 파 、 py py 。__init__.pyinside lib 폴더
2- 발신자 py 파일에 tester.py 코드 행을 추가합니다.
import os, sys
sys.path.insert(0,'lib')# insert the folder lib in system path
from BoxTime import Function_name # from the py file import the needed function
간단한 설명은 여기서 찾을 수 있습니다.
주의: 이것은 다른 폴더에서 모듈을 작성/가져오는 것을 말합니다.
퍼스널 익스피리언스:주피터 노트북에서 모듈을 작성하려고 했지만 작동하지 않았습니다(아마 .ipynb를 사용하여 부적절하게 작성했을 수도 있습니다).주피터 노트북 밖에서 수동으로 작성하거나 다른 IDE(pycharm 등)를 사용해야 했습니다.
/project/tester.py
/project/lib/BoxTime.py
file " " " 。__init__.py 행
/project/lib/somefolder/BoxTime.py
#lib에는 두 . 즉, 니즈에는 두 가지 항목이 있습니다.__init__.py somefolder라는 이름의 "somefolder는 "somefolder 。#somefolderboxtime.py ★★★★★★★★★★★★★★★★★」__init__.py
이것을 시험해 보세요.
from lib import BoxTime
언급URL : https://stackoverflow.com/questions/1260792/import-a-file-from-a-subdirectory
'itsource' 카테고리의 다른 글
| Visual Studio Code(VSCode)에서 php를 실행 또는 디버깅하는 방법 (0) | 2022.10.15 |
|---|---|
| MySQL Select Query - 값의 처음 10자만 가져옵니다. (1) | 2022.10.15 |
| Java 8에서 UTC+0 날짜를 얻는 방법 (0) | 2022.10.15 |
| Java regex 캡처 그룹 인덱스 (0) | 2022.10.15 |
| DeprecationWarning: 잘못된 이스케이프 시퀀스 - \d 대신 사용할 항목 (0) | 2022.10.15 |