2012-07-31 109 views
3

我在web2py中將模塊複製到應用程序的「modules」文件夾中。當我試圖導入模塊中的任何功能的任何控制器裏面,我得到以下錯誤:web2py無法識別模塊目錄中的模塊

<type 'exceptions.ImportError'> No module named module_name 

我得到這個錯誤,不論使用任何模塊。但是,如果我將相同的模塊複製到「網站包」並導入它,它完美地工作。

我發現「sys.path」不包含modules文件夾,但包含「site-packages」文件夾。

如何將模塊文件夾添加到特定於web2py的「sys.path」,或者是否有其他方法可以解決此問題?

+0

我想你應該嘗試建立您的項目在[virtualenv中(HTTP://的PyPI .python.org/PyPI中/的virtualenv/1.7.1.2)。你會在一個更清潔和更簡單的環境中運行,而且這很重要,你會減少因犯錯誤而破壞一切的機會。 – 2012-07-31 12:42:41

+2

/modules文件夾中是否有'__init __。py'文件?如果不是,請添加一個。 – Anthony 2012-07-31 15:04:48

+0

@Alexis即使** virtualenv **將是一個解決方案,我仍然想知道如何做到這一點的web2py方式。 web2py中每個應用程序的「modules」文件夾似乎都是爲了類似於我的問題而設計的。所以,我認爲這樣做會更好。不過,我也在考慮你的建議。 – SUB0DH 2012-07-31 15:06:57

回答

4

終於找到了我的問題的解決方案。

似乎爲了使用import module_name在模塊目錄中導入模塊,應用程序的名稱必須全部小寫。

此前,我的申請的名稱是projectX,但是當我將其更改爲projectximport module_name的工作方式應該如此。

我還發現,無論應用程序名稱如何,在導入模塊時顯式聲明應用程序名稱也可以工作。 import applications.projectX.modules.module_name也爲我工作時,應用程序的名稱是projectX

0

它應該像你期望的那樣工作,而且它對我來說確實如此。沒有必要更改sys.path。 web2py照顧這個。它期望在該目錄中找到模塊。 什麼版本的web2py?你從源頭上運行? (它下載源代碼發佈並啓動它作爲python web2py,或者你是否使用預編譯的二進制發行版?) 當你說「在控制器內的任何函數中導入該模塊」時,你到底想要做什麼? 對我來說,在我的默認控制器或模型的頂部有一個簡單的導入,它適用於當前的穩定版本。

+0

我正在使用web2py版本1.99.7 stable。我使用Python 2.7.3通過運行_web2py.py_文件從Windows 8 Consumer Preview下的web2py源代碼運行它。我通過在默認控制器的頂部使用import語句導入模塊。我曾嘗試在控制器的功能中使用它,但也會導致錯誤。 – SUB0DH 2012-08-01 11:31:19

1

您是否已經嘗試使用本地導入?

事情是這樣的:

twitter = local_import('twitter') 

其中Twitter是模塊I保存在模塊文件夾的名稱。

乾杯

+0

仍然有類似的錯誤 \t''type'exceptions.ImportError'>沒有名爲projectx.modules.findpath'的模塊 – SUB0DH 2012-09-09 03:35:46

0

這是進口的格式,使得PyCharm解決我的參考:

import applications.dashboard.modules.user_info as user_info 
0

,我發現這種情況的解決方法是,以確保應用程序是一個包。

舉個例子,如果你有foo的應用程序,你的樹看起來是這樣的:

applications 
├── __init__.py  <----- This file is probably missing 
├── yourapplication 
│   └── modules 
│    ├── ... 
├── ...