文章目录
- 一,如何将自己写的库,在其他模块中导入该库(jupyter和pycharm中一样的方式)
- 二, 一个package(包)内的模块如何访问另一个package中的模块
- 三,jupyter和 pycharm中的区别
- 四,参考博客:
一,如何将自己写的库,在其他模块中导入该库(jupyter和pycharm中一样的方式)
个人理解,在pycharm中的概念包(package),目录(Directory)和jupyter中的概念Folder(文件夹),在导入模块的时候,这三个所起的作用是一样的。
- 第一步,在系统中添加自己写的库的绝对路径(完整路径)
绝对路径(思考):为什么我们程序中的绝对路径必须使用双反斜杠,因为其中一个反斜杠用作转义,如果只写一个反斜杠,那么就会将路径中的紧跟反斜杠的字母转义,也许输出就不是原来那个字符了。如果这个反斜杠后面紧跟的是另一个反斜杠,那么反斜杠的转义字符还是反斜杠,那么两个反斜杠的最终输出为一个反斜杠字符,路径中的其他字符就不会被转义,保持原样输出,C:\Users\自己电脑用户名\PycharmProjects\Debug_program\jj,就和我们平时理解的绝对路径看起来一样了。
import sys,os
path_module = os.path.abspath(os.path.join('C:\\Users\\自己电脑用户名\\PycharmProjects\\Debug_program\\jj'))
if path_module not in sys.path:
sys.path.append(path_module)
![在这里插入图片描述](
其中linear_regression模块中是这样引入模块Operation的
from .Operation import h
dd= h()
dd.j('man11111111111111111')
以上是在pycharm中这样导入情况。
- 接下来,在jupyter中其实是一样的
这是最外层的目录结构:
我们要在04_extensions文件中的Code模块中导入自定义的 lincoln库
import numpy as np
from numpy import ndarray
import sys,os
path_module = os.path.abspath(os.path.join('C:\\Users\\自己电脑用户名\\Desktop\\from scratch\\python_code\\lincoln'))
if path_module not in sys.path:
sys.path.append(path_module)
from lincoln.layers import Dense
from lincoln.losses import SoftmaxCrossEntropy, MeanSquaredError
from lincoln.optimizers import Optimizer,SGD,SGDMomentum
from lincoln.activations import Sigmoid,Tanh,Linear,ReLU
from lincoln.network import NeuralNetwork
from lincoln.train import Trainer
from lincoln.utils import mnist
from lincoln.utils.np_utils import softmax
lincoln库中的目录结构如图:
注意 :lincoln库中的每一个模块的内部引用(这些模块都同一个目录下),都是通过点+模块名的方式进行引用,例如:在dense模块中是这样引用base模块的
from .base import ParamOperation
这一点和pycharm中的方式一样
二, 一个package(包)内的模块如何访问另一个package中的模块
- 只需要在想要运行的模块中添加如下代码段:
mport sys,os
this_path = os.path.abspath(os.path.join('..'))
if this_path not in sys.path:
sys.path.append(this_path)
注意 :两点表示可以访问本模块父目录中的其他包,以及其他包中的模块
- 如果两个模块都在该项目的根目录下,都是可以直接引用的,在jupyter和pycharm中都是一样的
- 在jupyter中(比如要在test1模块中导入test2模块):
- 如下的导入方式是错的,在jupyter和pycharm一样:
注意 :除非外部调用可以这样写,内部互相调用这样写会报错。
三,jupyter和 pycharm中的区别
- 在jupyter中无论两个同级模块的目录结构有多深,都不影响两个之间的互相引用,可以使用如下代码,导入都是没有问题的
from Operation import h
import Operation
注意 :被引用方必须是 .py文件,引用方是 .ipynb文件
- 这里科普一下,在jupyter中如何将.ipynb文件转化为.py文件
- File->Download as->Python(.py)
- 保存到你目前所在的模块的父文件夹中,使得两个处在同一级目录,再进行互相引用
- 但是在pycharm中不同
- 想要实现同级模块的调用需要加上最外层的包名(项目名下的第一级开始),依次通过.来逐层引用,比如:
注意 :不加外部的包名也可以实现,但是程序中会有红线,还是加上比较好。
如果概念那里理解的不对或者错误,请大家提出来,共同解决,谢谢!!!
如果帮助到你,记得点赞,评论哦~,谢谢读完!
四,参考博客:
python模块导入