2010-03-01 15 views
8

मैं अपने हैंडलर लिपि (main.py) में निम्न पंक्ति जोड़कर की कोशिश की है, लेकिन यह काम करने के लिए प्रतीत नहीं होता:आप Google App Engine (पायथन) में sys.path को कैसे संशोधित करते हैं?

sys.path.append ('subdir')

मेरी रूट निर्देशिका (यानी app.yaml युक्त एक) में

subdir रहता है।

यह काम करने के लिए है, क्योंकि जब मैं मॉड्यूल है कि subdir में रहते हैं, मेरे ऐप फट आयात करने का प्रयास नहीं लगता है।

+0

$ 10 का कहना है कि आप एक गुमराह '.pyc' यदि त्रुटि" ही तय "फाइल किया था। –

उत्तर

18

1) सुनिश्चित करें कि आप subdir में एक खाली __init__.py फ़ाइल है।

2) एक पूर्ण पथ का उपयोग करें; कुछ इस तरह:

import os 
import sys 

sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir')) 

संपादित करें: एक टिप्पणी में पूछे जाने वाले प्रश्नों का उत्तर देने के बारे में अधिक जानकारी प्रदान करते हैं।

As Nick Johnson demonstrates आप fix_path.py नामक एक फ़ाइल में कोड के उन तीन लाइनों रख सकते हैं। फिर, अपने main.py फ़ाइल में, अन्य सभी आयातों से पहले यह import fix_path करें। Link to a tested application using this technique

और, हाँ, __init__.py फ़ाइल की आवश्यकता है; प्रति documentation:

जब पैकेज का आयात, sys.path पर निर्देशिका के माध्यम से अजगर खोजें पैकेज उपनिर्देशिका की तलाश में।

__init__.py फ़ाइलों को पर आवश्यक है पाइथन निर्देशिकाओं को पैकेजों के साथ व्यवहार करें; यह पर किया जाता है, नाम, जैसे स्ट्रिंग, से अनजाने में वैध मॉड्यूल जो मॉड्यूल खोज पथ पर बाद में होता है, से स्ट्रिंग जैसे निर्देशिका को रोकता है। सबसे सरल मामले में, __init__.py केवल एक खाली फ़ाइल हो सकती है, लेकिन यह पैकेज के लिए प्रारंभिक कोड भी कार्यान्वित कर सकती है या बाद में वर्णित __all__ चर सेट कर सकती है।

+0

मैं subdir नामक एक पैकेज नहीं बनाना चाहता हूं। क्या वह नहीं है 1) क्या करेगा? साथ ही, मैं आपके द्वारा उल्लिखित कोड कहां रखूंगा) ?? – allyourcode

+0

2) वह उत्तर है जिसे मैं ढूंढ रहा हूं। 1) जैसा कि दस्तावेज़ों से आपके उद्धरण बताते हैं, यह सबडिर को पैकेज बनाता है, जो मैं नहीं चाहता हूं। – allyourcode

+0

असल में, मुझे यकीन नहीं है कि sys.path.append ('subdir') को मुख्य रूप से जोड़ने का मेरा मूल तरीका क्यों है।py (मेरे app.yaml में एकमात्र गैर स्थैतिक हैंडलर) काम नहीं किया। मैंने बस इसे फिर से कोशिश की, लेकिन इस बार, कोई विस्फोट नहीं:/ – allyourcode

2

यह मेरे लिए sys.path में पहली प्रविष्टियों के रूप में नई डीआईआर डालने के लिए काम करता था।

path_changer.py:

import os 
import sys 

sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'libs')) 
sys.path.insert(1, os.path.join(os.path.dirname(__file__), 'apps')) 

app.py:

import path_changer 
from google.appengine.ext.webapp.util import run_wsgi_app 

from flask import Flask 
import settings 

app = Flask('myapp') 
app.config.from_object('settings') 

from website import views as website_views 

run_wsgi_app(app)