에있는이라는 파일이 tester.py
있습니다 /project
.
/project
라는 하위 디렉토리가 lib
있으며 다음과 같은 파일이 있습니다 BoxTime.py
.
/project/tester.py
/project/lib/BoxTime.py
나는 가져올 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
BoxTime
하위 디렉토리에서 가져 오는 방법에 대한 아이디어가 있습니까?
편집하다
가 __init__.py
문제 였지만을 참조하는 것을 잊지 마세요 BoxTime
로 lib.BoxTime
, 또는 사용 :
import lib.BoxTime as BT
...
BT.bt_function()
답변
http://docs.python.org/tutorial/modules.html 여기에서 패키지 문서 (섹션 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!
훨씬 나중에-리눅스에서는 다음과 같이 보일 것입니다 :
% 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
.
리눅스 쉘에서 다음 명령을 입력하면됩니다 :
$ touch anything/__init__.py
이제 다음 구조를 갖습니다.
$ ls anything/
__init__.py
mylib.py
$ ls
main.py
그럼 당신은 가져올 수 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)
답변
lib 디렉토리에 __init__.py
파일이 있습니까?
파이썬은 __init__.py
디렉토리가 모듈인지 확인하기 위해 사용 합니다.
답변
시도하십시오 import .lib.BoxTime
. 자세한 정보는 PEP 328의 상대 가져 오기에 대해 읽으십시오 .
답변
나는 기본적으로 모든 경우를 다루는이 작업을 수행합니다 ( __init__.py
상대 / 경로 / to / your / lib / 폴더에 있는지 확인하십시오 ).
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 함수 를 사용 하고 호출 하려고 합니다.
따라서 app.py로 작성하십시오.
import sys, os
sys.path.append(os.path.dirname(os.path.realpath(__file__)) + "/../anotherproject")
import utils
utils.foo()
