문제

'/home/user/temp/a40bd22344'폴더가 있다고 가정 해보십시오. 이름은 완전히 무작위이며 모든 반복이 변경됩니다. 고정 된 이름 인 'Project'를 사용 하여이 폴더를 파이썬으로 가져올 수 있어야합니다. 가져 오기 조회를 활성화하기 위해이 폴더를 sys.path에 추가 할 수 있지만 'A40BD22344'를 '프로젝트'로 바꿀 수있는 방법이 있습니까?

아마도 영리한 해킹이있을 것입니다 이니.py?

추가 :

표준을 통해 '프로젝트'를로드하는 다른 스크립트 : 즉 글로벌이어야합니다.

import project

대신 A40BD22344를로드하여 제대로 작동해야합니다.

도움이 되었습니까?

해결책

당신은 먼저 그것을 가져옵니다 수입:

>>> __import__('temp/a40bd22344')
<module 'temp/a40bd22344' from 'temp/a40bd22344/__init__.py'>

그런 다음이 모듈이 Python에 project:

>>> import sys
>>> sys.modules['project'] = sys.modules.pop('temp/a40bd22344')

그 후, 현재 Python 세션에서 프로젝트 가져 오기 프로젝트는 원본 모듈을 얻을 수 있습니다.

>>> import project
>>> project
<module 'temp/a40bd22344' from 'temp/a40bd22344/__init__.py'>

이것은 또한 하위 모듈에도 효과가 있습니다 : 당신이 같은 위치에 foobar.py가있는 경우

>>> import project.foobar
>>> project.foobar
<module 'project.foobar' from 'temp/a40bd22344/foobar.py'>

부록. 내가 실행중인 내용은 다음과 같습니다.

>>> print sys.version
2.5.2 (r252:60911, Jul 31 2008, 17:28:52) 
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)]

다른 팁

다음은 Sys.Path를 만지지 않고 imp 파이썬의 모듈 :

import imp

f, filename, desc = imp.find_module('a40bd22344', ['/home/user/temp/'])
project = imp.load_module('a40bd22344', f, filename, desc)

project.some_func()

다음은 좋은 문서에 대한 링크입니다. imp 기준 치수:

확신하는, project = __import__('a40bd22344') ~ 후에 sys.path 제대로 설정하면 작동합니다.

인수로 전체 경로를 취하고 설정하는 함수에서 그것을하고 싶다고 가정합니다. 글로벌 수입 project 적절하게 (마술처럼 만들뿐만 아니라 import project 나중에 다른 모듈에서 작업하십시오). 케이크 조각 :

def weirdimport(fullpath):
  global project

  import os
  import sys
  sys.path.append(os.path.dirname(fullpath))
  try:
      project = __import__(os.path.basename(fullpath))
      sys.modules['project'] = project
  finally:
      del sys.path[-1]

이것은 또한 발견 된대로 sys.path를 남깁니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top