关于python项目路径导入自己写的库出错的一点思考

其实也是在写自己项目的时候遇到的,以前也遇到了但是一直采取的是回避的策略,这次总算弄清楚所以总结一下。

这个项目的顶级目录是medivac,他本身是一个python模块。

熟悉flask的人都知道,在写一个flask项目的时候,我们常常将一个模块的app初始化放在根目录的__init__.py文件中。

然后可以很方便的把其它需要路由的模块都引入到这个__init__.py中达到自动加载并且路由的效果。

另外也可以使用一个叫做flask蓝图的东西(blueprint),将模块细分。

如果是在__init__.py初始化了app(就暂时理解成app=Flask(__name__)),name在views中我们建立一个叫hello的文件,并且写一个函数路由他像这样

from medivac import app

@app.route("/")
def hello():
    return "let‘s move!"

会爆出这样的错误

from medivac import app
ImportError: No module named medivac

为什么会找不到medivac模块?我们都知道在导入该模块下面__init__.py东西的时候直接写该模块名字就可以,因为__init__.py默认会运行加载。如果使用IDE会发现代码毫无问题,也可以正常跳转。

后来发现并不能这么写,必须要medivac上面还有文件夹包住的时候,这样的寻址才可以。在python看来,他看不到这个根目录,他认为项目目录是

medivac/ 而不是 /medivac/

所以如果改成这样

from __init__ import app

就可以正常运行了。

但是我觉得这样坑蛮多的,新建一个.py文件来初始化app,然后使用蓝图来路由也是不错的选择。

特别注意,还有一个严重影响模块寻址的环境变量PYTHONPATH,将当前环境变量的PYTHONPATH设置成对应的地址,可以方便的帮助绝对寻址。

另外顺便提一点,关于uwsgi的配置

[uwsgi]
# uwsgi 启动时所使用的地址与端口
socket = 127.0.0.1:8001

# 指向网站目录
chdir = /home/medivac/project/medivac

# python 程序内用以启动的 application 变量名
module = app
callable = app

master = True

# 处理器数
processes = 1

# 线程数
threads = 1

# 工作进程
workers = 1

当指定的chdir是/home/medivac/project/medivac的时候那么module代表的是去哪个文件里找callable 这个app来进行加载。

时间: 2024-10-06 20:04:45

关于python项目路径导入自己写的库出错的一点思考的相关文章

在android项目中导入自己写的jar文件发现不能打包到apk文件中

今天在写项目的时候导入自己写的jar文件,在调试的时候出现找不到jar文件的错误: 08-06 21:42:10.744: E/AndroidRuntime(2578): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.iotlife/com.example.iotlife.MainActivity}: java.lang.ClassNotFoundException: Di

Pycharm 项目无法导入自己写的模块(问题记录贴)

问题背景: 从外部导入一个Python项目后,发现包错误,如图: 解决步骤: 1.将目录下的"5-6——apriori.py"复制一份,重命名为”apriori.py": 2.查资料知,pycharm不会将当前文件目录自动加入自己的sourse_path: 3.右键当前文件的目录名code,.点击make_directory as-->sources Root将当前工作的文件夹加入source_path就可以了,如图: 思考: 1.包名不能用数字: 2.要把当前目录加入

python之路径导入

问题: 最近在学习import的时候,发现不像import xxx,或者from xxx import ooo 这样简单.比如,看下面这个图: 要导入才能在te.py调用pre.tab.py?? 直接导入: import pre_tab Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/laonanhai/shop_store/test/te.py", line 14, in

python 根据路径导入模块

Import python module NOT on path http://stackoverflow.com/questions/10161568/import-python-module-not-on-path 常规做法: [python] view plain copy import sys sys.path.append('C:/full/path') from foo import util,bar 而要直接通过路径 [python] view plain copy import 

开发Python项目案例,这8个库不容错过,功能强大性能优质

1.数据库中即时保存数据:Dataset: 2.从网页抓取数据:Beautiful Soup 3.和 HTTP 内容打交道:Requests 4.编写命令行工具:Click 5.对事物命名:Python Slugify 6.和插件打交道:Pluggy 7.把 CSV 文件转换到 API 中:DataSette 8.处理环境变量等:Envparse 原文地址:https://www.cnblogs.com/samtang/p/12672218.html

python的相对路径导入问题

用python做项目,如果项目大了,或者想更好的管理程序,总是要使用包.包解决了命名冲突的问题. 今天在使用python的相对路径导入的时候,遇到了不少的问题. 包导入情形: src/    __init__.py    main.py    components/        __init__.py        expander.py        language_id.py    utilities/        __init__.py        functions.py 如果要

Python之路【第二十四篇】:Python学习路径及练手项目合集

Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Python技术路径中包含入门知识.Python基础.Web框架.基础项目.网络编程.数据与计算.综合项目七个模块.路径中的教程将带你逐步深入,学会如何使用 Python 实现一个博客,桌面词典,微信机器人或网络安全软件等.完成本路径的基础及项目练习,将具备独立的Python开发能力. 完整的Python学

PyCharm如何导入python项目,并配置虚拟环境

Pycharm导入python项目 进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹: 打开了python项目后,需要配置该项目对应的python才可以正常运行: 配置步骤:File→settings 在设置弹窗中选择Project Interpreter,然后点击add: 在弹窗中,选择Existing environment,路径可以选择python项目的路径: 然后就大功告成了,可以去试着运行你的程序了~ 原文地址:https://www.cnblogs.

Python项目中如何优雅的import

Python项目中如何优雅的import 前言 之前有一篇关于Python编码规范的随笔, 但是写的比较杂乱, 因为提到了import语句, 在篇文章中, 我专门来讲Python项目中如何更好的import 标准库与第三方库的导入 导入一个模块, 如果模块名太长, 则使用import as; 如果是导入子模块, 则使用from import as 如果需要导入类的, 则使用from import导入类, 如果要导入某一个模块的多各类的话, 则类名使用逗号分隔 示例 导入sklearn中的svm中