초기화 모듈 내에서 함수 호출을 PYTHONPATH에 패치하여 현재 디렉토리를 추가하는 데코레이터로 래핑합니다. 따라서 PYTHONPATH에 패키지를 명시 적으로 추가하는 것에 대한 걱정없이 모듈 내에서 상대적 가져 오기를 사용할 수 있습니다. PYTHONPATH (패브릭 작업 사용시) 패치
@patch_python_path
def initialize():
#at this point any code being run has access to local modules through relative imports
pass
내가 인식하지 나는이 방법으로 모든 주요 문제가 있습니까 : 여기
def patch_python_path(f):
@wraps(f)
def wrap(*args, **kwargs):
ROOT = os.pathsep.join([os.path.abspath(os.path.dirname(__file__))])
if not os.environ.has_key("PYTHONPATH"):
os.environ["PYTHONPATH"] = ""
if not (ROOT in os.environ["PYTHONPATH"].split(":")):
os.environ["PYTHONPATH"] = "%s:%s" % (os.environ["PYTHONPATH"], ROOT)
if not ROOT in sys.path:
sys.path.append(ROOT)
return f(*args, **kwargs)
return wrap
내가 그것을 사용하는 방법 (@의 abarnert의 의견에 따라 편집)? 이와
내 목표는 다음과 같다 :
- 내가 자기가 사용자가 즉시 나는 또한 사용자가 할 수 있다고 가정
- 추가 ENV 조작없이 사용할 수있는 부트 스트랩 포함 갖고 싶어 부트 스트랩 패키지의 이름을 변경하여 모든 가져 오기가 상대적인 상태로 유지되도록해야합니다.
[편집] 실제로 내가 문제가 있다는 것을 깨닫고 있습니다. Fabric이 순수 파이썬 모듈 가져 오기와 반대로 작업을 실행하는 방식과 관련이 있습니다. 파이썬 셸 (팹 task1과 반대)에서 작업을 실행하려고하면 모든 패치가 필요하지 않고 모든 가져 오기가 올바르게 해결됩니다. 당신은 단순히 sys.path
에 현재 경로를 추가 할 수 있습니다 팹 원인 가져 오기 오류
명확해야 : 사용자가 패키지를 설치하지 않고 현재 디렉토리에 패키지를 드롭하고 사용할 수있게하려면? – abarnert
예. 좀 더 구체적으로 말하자면 부트 스트랩 상용구 역할을하는 장고 기반 웹 애플리케이션이다. 사용자 클론 일반 버전, 조정 및 그냥 작동 –