簡體   English   中英

Mac python vs.spyder中的不同模塊導入

[英]Different module import in Mac python vs. spyder

我最近問了這個問題,關於在python中導入任意數量的模塊。 我收到了兩個很好的答案。 當我在spyder中編程時,兩者都起作用。

今天,我打算從終端運行腳本作為測試,因為我打算將代碼移至服務器。 但是這次,腳本因以下回溯而崩潰:

File "evaluation.py", line 27, in __init__
self.solvers.append( __import__(file_name[:-3]) ) #cut away .py
ImportError: No module named 'v00'

文件架構如下所示:

-evaluation.py
-evaluation
    -v00.py
    -v01.py

Evaluation.py中引起麻煩的代碼是以下代碼:

os.chdir('evaluation')

for file_name in glob.glob("*.py"):
    self.solvers.append( __import__(file_name[:-3]) ) #cut away .py

for idx, solver in enumerate(self.solvers):
    self.dqn.append(solver.DQNSolver() )

為什么這在spyder中起作用但在終端中不起作用? 他們都使用python 3.5,在執行惡意代碼時,我再次檢查了它們是否都在“評估”文件夾中。

解決此問題的典型方法是通過添加一個空的__init__.py文件將文件夾變成一個包,然后使用import evaluation.v00 (或等效的__import__函數調用)從該包中import evaluation.v00 但是您可能會遇到問題,因為您的主腳本與軟件包的名稱相同。 我建議重命名其中一個

-evaluationscript.py
-evaluation
    -__init__.py (empty file)
    -v00.py
    -v01.py

然后你可能需要使用import_module而不是__import__填充solvers與實際模塊(而不是封裝)。

我對spyder不熟悉,但是如果相同的代碼在那里工作,則可能是通過PYTHONPATH env var或通過修改sys.path將評估文件夾添加到搜索路徑中。

運行腳本時,腳本的路徑將添加到模塊導入的默認搜索路徑,但是使用os.chdir更改文件夾不會影響該搜索路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM