小问题大隐患:如何正确设置 Python 项目的入口文件?

Vue | vue cli入口文件解析(main.js,app.vue,index.html webpack) 在vue cli项目中,main.js是入口文件,定义了vue实例,并引入了整个项目的根组件app.vue,并将其挂载到index.html中id为‘app’的节点上。 阅读详情

有一位同学提到了 Python 找不到模块的问题:

问题涉及到的代码结构和代码截图如下:

这个问题的解决方法非常简单,就是把start.py文件从bin文件夹移出来就好了。

但如果对这个问题进一步分析,可以看到更多问题。

今天这个问题本质上也是工作区导致的问题。这个同学的项目根目录是MY_API,所以他使用的编辑器VSCode 就会默认把MY_API当做工作区。所以,当他在start.py文件中写上from lib.interface import server时,VScode 并不会给他标记红色波浪线。因为从 VSCode 的视角看,lib文件夹确实就是在工作区下面的。

但是,当他在 VSCode 里面运行这个start.py文件时,Python 是从bin文件夹下面运行的。此时,Python 会把bin文件夹当做工作区。在工作区里面就只有这一个start.py文件,所以当然找不到lib文件夹。

但问题在于,你不应该这样做。你不应该把项目的入口文件,放到项目内部很深的文件夹中。

所谓入口文件,就是要首先经过它,才能到达其他的文件。当你拿到一个 Python 项目,你只需要首先从入口文件开始阅读代码,根据入口文件调用的模块,一路看下去,你就能读到它的所有实现逻辑。

但如果大家经常逛 Github,就会发现,有些人可能是被其他垃圾语言污染了思想,他的 Python 项目,根目录有五六个文件夹和七八个.py文件。你拿到这个项目的时候,你甚至不知道,当你想运行这个代码的时候,python3 xxx.py应该运行哪个文件。你多方打听,或者看了半天文档,才知道,哦,原来入口文件在com/xx/yy/zz/script/run.py。

当你打开这个run.py文件,你发现它的顶部,文件导入的代码写的是from ../../../../aaa import bbb。

简直是神经病写法。我知道有些垃圾语言流行这样写。但现在你用的是 Python,学聪明一点,别那样写。

对于一个 Python 项目来说,入口文件应该始终在最外层。例如:

当你要启动这个项目的时候,直接在最外层python3 main.py,就能把它启动起来。在main.py里面,你可以导入其他模块,然后调用其他模块里面的类或者函数。

这样做的好处是什么?这样做,你是在项目的根目录启动的这个项目,所以你的工作区就是项目的根目录。那么你在任何一个.py文件里面都可以很容易地基于工作区导入任意其他文件。例如,你现在在models/mongo-util/mongob_helper.py文件中,你想导入utils/abc.py中的time_format()函数,那么,你只需要这样写就可以了。

from utils.abc import time_format

你根本不可能出现需要导入父文件夹中的某个模块的情况。

只有工具脚本,才需要单独使用一个文件夹来存放,然后调用父文件夹中的其他文件。例如,我现在有一个工具脚本,它每天晚上0点会读写 MongoDB,清理无效数据,那么此时,我可以在根目录单独创建一个script或tools或者bin文件夹,然后把工具脚本放进去,例如:

在这个工具脚本里面,你可能会调用models/mongo-util/mongob_helper.py文件中的某个函数。这种情况下,你调用父文件夹中的内容是可以接受的。但这毕竟只是工具脚本。

可能还有同学要问,那如果我的项目是一个 Python 的包,它本身没有入口文件怎么办呢?这个时候,你可以把这个包的__init__.py当做它的入口文件。大家可以参考我在 GitHub - kingname/GeneralNewsExtractor: 新闻网页正文通用抽取器 Beta 版.[1]的代码组织结构。

在项目根目录留下一个example.py文件,用来演示如何调用这个包。而这个包本身的代码,是在一个叫做gne的文件夹中的。这个gne文件夹是一个包,它的入口文件在__init__.py中。

各位,当你写代码的时候,你先想一想,如果别人拿到了你的代码,想要梳理一下这个项目的逻辑,在不询问你的情况下,怎么让他知道应该从哪个文件开始读?应该按什么顺序读?他能不能轻易地看到数据在你的代码中是怎么运转的?

参考资料

[1]

GitHub - kingname/GeneralNewsExtractor: 新闻网页正文通用抽取器 Beta 版.: https://github.com/kingname/GeneralNewsExtractor

年度最火的文案

50、Python之模块和包:入口文件和模块,Python项目组织的最佳实践 本文介绍了模块中的几个关键内置变量,介绍了模块和入口文件的区别,以及入口文件的作用,最后给出了一些Python项目代码组织的最佳实践。 阅读详情

相关推荐

Python 安全问题全解析:隐患排查与应对策略

Python 编程过程中,安全问题贯穿于各个模块和开发环节。从数据的编码与解析、Web 应用开发,到多进程处理、加密通信等方面,稍有不慎就可能引入安全风险。通过深入理解这些安全问题的原理,掌握对应的有效应对方法,并遵循安全编程的基本原则,如最小权限原则、输入验证与过滤等,能够显著提升 Python 程序的安全性。同时,合理运用漏洞扫描与安全测试工具,定期对代码进行检测,及时发现并修复潜在的安全漏洞,是保障代码安全稳定运行的重要手段。

Tekin 是深耕技术 20 年的全栈实战派专家,精通 Go/Python/Java 等多语言开发。博客专注技术原理与实战结合,深度解析 Python 高阶编程、Go 语言架构、数据库优化等硬核内容。涵盖并发编程、机器学习、云原生等前沿领域,通过真实案例拆 1322

0.3、Vue-入口文件的简单介绍:Vue对象、路由、单文件组件

文章目录一图胜千言详解入口文件 main.jselrouter举例单文件组件开启 Router 渲染componentstemplate单文件组件单文件组件内容结构举例使用 一图胜千言 详解 入口文件 main.js 声明了 Vue、Router 插件的声明; 声明了指定单文件组件的引用; 声明一个新的Vue对象。 import Vue from 'vue' import App from './App' import router from './router' Vue.config.producti

༺ bestcxx的专栏 ༻ 4823

ASP.NET Core - 入口文件

通过以上的代码,我们可以看到入口文件的作用是创建和配置主机对象,并启动应用程序。在ASP.NET Core中,入口文件是一个重要的组成部分,它定义了应用程序的启动过程和配置。希望这个简单的示例能帮助你理解ASP.NET Core中的入口文件的作用和用法。请注意,以上示例是一个简化的版本,实际的入口文件可能包含更多的配置和自定义逻辑,根据应用程序的需求而定。方法创建了一个默认的主机构建器。类是另一个重要的组件,它包含了应用程序的配置和中间件的注册。类是我们的入口类,它包含了一个静态的。

CodeBandit的博客 256

chatgpt赋能python:Python主程序入口:了解它的重要性并学会使用

Python主程序入口是Python程序的入口点。它是程序的主入口文件,所有的代码都从这个文件开始执行。在Python中,主程序入口的默认文件名是。当Python程序运行时,解释器会在环境变量PYTHONPATH中搜索文件。如果找到了这个文件,解释器就会执行这个文件中的代码,并将其作为程序的主入口点。如果没有找到文件,Python解释器将会尝试执行其他文件。Python主程序入口是Python应用程序的入口点。

laod112的博客 1750

手把手教你用Simulink搭建单相全桥逆变器(附单电流闭环控制仿真文件)

本文详细介绍了如何在Simulink中搭建单相全桥逆变器并实现单电流闭环控制。从功率主电路建模、核心器件参数设置,到控制系统的PI调节与前馈补偿,提供了完整的仿真步骤与调试技巧。文章旨在通过动手实践,帮助读者跨越理论与仿真的鸿沟,深入理解电力电子闭环控制的核心原理。

d6e7f8g9h的博客 316

别再混淆了!一文彻底搞懂STM32的BootROM、BootLoader和启动模式(附启动流程图)

本文深入解析STM32的启动机制,详细讲解BootROM、BootLoader与启动模式的区别与联系,并提供实战指南。通过清晰的启动流程图和配置示例,帮助开发者彻底理解STM32启动流程,解决常见的启动问题,提升嵌入式开发效率。

weixin_33728268的博客 539

python什么是入口文件_小问题大隐患:如何正确设置 Python 项目的入口文件?

今天在公众号粉丝群里面,有一位同窗提到了 Python 找不到模块的问题:python 问题涉及到的代码结构和代码截图以下:git 这个问题的解决方法很是简单,就是把start.py文件从bin文件夹移出来就行了。github但若是对这个问题进一步分析,能够看到更多问题。编辑器在我之前的文章:为何Python代码能运行可是PyCharm给我画红线?中,我讲到了工做区(Workdir)对代码的影响。...

weixin_30420027的博客 868

rv1126 读取sensor输入,输出到屏幕显示【RK_MPI API接口】

rv1126 libdrm VO

学习记录 1万+

python不适合大型项目_小问题大隐患:如何正确设置 Python 项目的入口文件?

今天在公众号粉丝群里面,有一位同学提到了 Python 找不到模块的问题:问题涉及到的代码结构和代码截图如下:这个问题的解决方法非常简单,就是把start.py文件从bin文件夹移出来就好了。但如果对这个问题进一步分析,可以看到更多问题。在我以前的文章:为什么Python代码能运行但是PyCharm给我画红线?中,我讲到了工作区(Workdir)对代码的影响。PyCharm、VSCode 识别的工...

weixin_34879325的博客 157

基于Python+OpenCV中文及符号检测

一、项目背景与意义在图像处理、文档识别、自动翻译等场景中,中文及符号的准确检测是一个重要且复杂的任务。传统的字符检测方法往往对英文等拉丁字母系的识别效果较好,但对中文及特殊符号的识别准确率较低。本项目旨在利用Python编程语言结合OpenCV库,开发一个能够高效、准确地检测图像中中文及符号的系统,为相关领域的研究和应用提供技术支撑。二、技术实现图像预处理:利用OpenCV的图像处理功能,对输入的图像进行灰度化、二值化、滤波去噪等预处理操作,以提高中文及符号检测的准确性[1]。

2301_79809972的博客 1121

接上篇,记录一下【Unity 3D对博途PLCSIM的通讯】文章有点长~仔细看,很基础

本文参考链接:西门子PLC丨PROFINET通讯仿真(虚拟通讯)做了一些更详细的优化,本文使用的类库并非原作者使用的类库。 首先,昨天项目已经创建好了,这边也加了一个InputField和一个Button,可以实现简单的读取,ok开始。 放入准备好的通讯类库; 新建一个博途的项目,本次测试使用博途V15,测试环境为虚拟机,Unity运行在本地计算机,建立博途项目流程如下: 新建项目,右键项目-属性-保护-对勾,如图: 不得不说的是,仿真中加密的FB块是无法下载的哦~ 添加CPU...

NS_Speak(IVAV) 8066

python什么是入口文件_小问题大隐患:Python 项目的入口文件找不到?该如何正确设置?...

今天在交流群里面,有一位同学提到了 Python 找不到模块的问题:问题涉及到的代码结构和代码截图如下:这个问题的解决方法非常简单,就是把start.py文件从bin文件夹移出来就好了。但如果对这个问题进一步分析,可以看到更多问题。在我以前的文章:为什么Python代码能运行但是PyCharm给我画红线?中,我讲到了工作区(Workdir)对代码的影响。PyCharm、VSCode 识别的工作区,...

weixin_29597551的博客 281

20、机器人硬件改造与Geomagic Touch设备的运动学和动力学模型

本文详细介绍了机器人CRS 465和255的硬件改造过程,包括数字阶段、模拟阶段、功率阶段及软件实现,并深入研究了Geomagic Touch触觉设备的五自由度与三自由度运动学、微分运动学及动力学模型。文章还探讨了其在虚拟手术、装配等场景中的应用,提出了硬件与模型优化方向,如电源管理改进、信号处理优化、参数校准与自适应控制,并展望了多机器人协作、多传感器融合与智能控制算法的发展前景。

e4f5g6h7的博客 122

python done完怎么进去_小问题,大隐患:如何正确设置 Python 项目的入口文件?...

今天在公众号粉丝群里面,有一位同学提到了 Python 找不到模块的问题:问题涉及到的代码结构和代码截图如下:这个问题的解决方法非常简单,就是把start.py文件从bin文件夹移出来就好了。但如果对这个问题进一步分析,可以看到更多问题。在我以前的文章:.py文件时候的工作区。今天这个问题本质上也是工作区导致的问题。 这个同学的项目根目录是MY_API,所以他使用的编辑器VSCode 就会默认把M...

weixin_32153867的博客 120

(三十九)Flask 多应用架构(Multiple Apps)与 DispatcherMiddleware 实战解析

(三十九)Flask 多应用架构(Multiple Apps)与 DispatcherMiddleware 实战解析

孤寒者的博客 1万+

2、欧洲期权的赫斯顿模型

本文详细介绍了赫斯顿随机波动率模型在欧洲期权定价中的应用。模型通过引入随机方差过程,克服了布莱克-斯科尔斯模型中波动率恒定的局限性,更贴近市场实际。文章阐述了模型的动态结构、风险中性转换、期权定价公式及其半封闭解的计算方法,并提供了基于VBA的数值实现方案。通过梯形法则与高斯积分等数值方法对比,分析了不同积分策略的精度与效率。同时验证了当波动率为零时,赫斯顿模型退化为布莱克-斯科尔斯模型的一致性。最后讨论了模型的优势、挑战及实际应用建议,强调了数值积分稳定性和参数估计的重要性。

tequila的博客 350

功能强大,但因安全隐患被企业禁用的Python内置函数

强大与危险并存。

weixin_43790276的博客 8462

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux服务器上正式部署Django项目时该如何正确设置文件和文件夹的权限?

有读者问,我在Linux上部署Django项目时通常将所有文件和文件夹权限设置成777,以保证项目顺利运行,有没有更好的方式?答案是当然有,不过我们得先了解下Linux系统下文件权限基础...

大江狗 2326

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

运行python需要网络吗_这样运行Python命令会给电脑带来极大的隐患

Python已经成为全球最受欢迎的编程语言之一。原因当然是Python简明易用的脚本语法,只需把一段程序放入.py文件中,就能快速运行。而且Python语言很容易上手模块。比如你编写了一个模块my_lib.py,只需在调用这个模块的程序中加入一行import my_lib即可。这样设计的好处是,初学者能够非常方便地执行命令。但是对攻击者来说,这等于是为恶意程序大开后门。尤其是一些初学者将网上的Py...

weixin_39559523的博客 1307

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python毕设 煤矿隐患管理系统论文+程序

在国内外的矿业生产环境下,煤矿安全始终是至关重要的环节。传统的管理方式在处理员工、部门、考勤信息、区域、外来人员申请、禁止进入人员、人员培训、风险预处理、安全知识、安全日常、事故、安全信息、井下设备、安全隐患等众多信息时效率低下且容易出错。通过构建煤矿隐患管理系统,可以实现员工、部门、考勤信息、区域、外来人员申请、禁止进入人员、人员培训、风险预处理、安全知识、安全日常、事故、安全信息、井下设备、安全隐患等信息的高效管理,及时发现和处理隐患,降低煤矿事故风险,保障煤矿工人的生命安全和企业的正常生产运营。

゛赵学长程序设计 618

使用 Transformers 中的 BertGeneration 构建序列生成模型:从 BERT 预训练权重到 Bert2Bert 微调实战

本文以 Transformers 仓库中 [BertGeneration 模型文档](https://link.gitcode.com/i/c53b825171f0262d99e18fc032441517) 为核心,系统讲解如何利用公开的 BERT / RoBERTa 预训练检查点,通过 `BertGenerationEncoder`、`BertGenerationDecoder` 与 `Enco

gitblog_00817的博客 986

python渗透测试入门之wordpress文件隐患

近期收到了电子工业出版社赠送的一本网络安全书籍《python黑帽子》,书中一共24个实验,今天复现第12个实验(wordpress文件隐患),我的测试环境是mbp电脑+同事的wordpress在线站点+conda开发环境。wordpress是知名博客网站,如果安装之后没有删除一些配置文件,容易导致网站安全隐患,通过对比在线wordpress和本地wordpress之间的相同文件,得到在线wordp...

ailx10 380
上一篇: 震惊!谁上春晚最多?我用 Python 分析过往 39 届央视春晚的数据
下一篇: 2021 互联网大厂“凡尔赛”年终奖大赏(不含年终奖金)
菜鸟学Python
博客等级 码龄9年 8086粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值