Dex*_*ter 8 python import python-module alembic
我正在尝试使用alembic,它是python中的sqlalchemy工具.您键入一个命令,它会生成一个文件夹"alembic",里面有py文件.里面的py文件,需要在一个名为"myapp"的单独文件夹中链接到我的应用程序.但我不能把它联系起来.它说它不存在,相对导入不起作用.
所以我需要从myapp/configs/config.py文件导入我的配置类.
/apps
+--/alembic
|----env.py <--- the calling file
+--/myapp
|----configs/__init__.py <--- has "DefaultConfig" class imported
|----configs/config.py <--- I want to import the class inside here.
Run Code Online (Sandbox Code Playgroud)
在env.py里面:
from myapp.configs import DefaultConfig
Run Code Online (Sandbox Code Playgroud)
不行.
我试过了:
from ..myapp.configs import DefaultConfig
Run Code Online (Sandbox Code Playgroud)
没有成功.
alembic docs中的示例代码说只使用"myapp.whatever".
我甚至在环境变量中将我的"/ apps"和"/ myapp"添加到PYTHON_PATH.
示例错误:
File "D:\apps\myapp\lib\site-packages\alembic\command.p
y", line 97, in revision
script.run_env()
File "D:\apps\myapp\lib\site-packages\alembic\script.py
", line 191, in run_env
util.load_python_file(self.dir, 'env.py')
File "D:\apps\myapp\lib\site-packages\alembic\util.py",
line 186, in load_python_file
module = imp.load_source(module_id, path, open(path, 'rb'))
File "alembic\env.py", line 5, in <module>
from ..myapp.configs import DefaultConfig as conf
ValueError: Attempted relative import in non-package
Run Code Online (Sandbox Code Playgroud)
您有两种可能的问题解决方案:
通过在终端中运行以下BASH/SH shell命令,将路径添加到应用程序目录:
$ export PYTHONPATH=$PYTHONPATH:'/path/to/apps'
Run Code Online (Sandbox Code Playgroud)
请注意,将其添加到PATH环境变量将不起作用.要了解有关PYTHONPATH的更多信息,如何管理它以及一般模块的友好信息:
http://www.stereoplex.com/blog/understanding-imports-and-pythonpath
但请注意,这种方法确实会影响系统的PYTHONPATH.强烈建议使用virtualenv - 以防出现问题,它不会影响您的所有系统和其他应用程序.使用virtualenvwrapper时:
$ add2virtualenv '/path/to/apps'
Run Code Online (Sandbox Code Playgroud)
更多HERE.
或者,您可以通过添加以下内容执行相同的操作,但仅针对脚本运行时:
import sys
sys.path.append('/path/to/apps')
Run Code Online (Sandbox Code Playgroud)
到你的apps/alembic/env.py文件.
最后,在同一个文件中,进行以下更改:
from myapp.configs.config import DefaultConfig
Run Code Online (Sandbox Code Playgroud)
请注意,你的apps/myapp文件夹也应该包含__init__.py文件(可能是空的),以使Python可以作为一个模块,如Demian Brecht指出的那样.
| 归档时间: |
|
| 查看次数: |
4702 次 |
| 最近记录: |