No module named Npp
-
Okay, so I was saving it to the default folder then. Found it now, sorry for confusion, had to reload N++ multiple times. The script is automatically saved as
.py
. Still getting the same mistake.
And no worries, my python expertise is not high, so I’d rather make sure that every step is correct. -
You are in an area where I don’t think I can provide further help, but @dail is typing, so… :)
-
@Alan-Kilborn thanks for your help anyway!
-
Hello, @alina-gubanova, @alan-kilborn, and All,
Among my numerous portable versions of Notepad++, installed on my laptop, I considered the most recent one, where the Python script was installed => I tested the Alina’s script with Notepad++
v7.6.3
!As this version is located in
D:\@@\763\...
:-
First, I created a folder named
D:\@@\763\Test
-
Then I created two ANSI files, in folder
Test
-
I opened N++
v7.6.3
and the Python console -
I used the Python script, below which worked as expected : The two files, in the
Test
folder, have been saved with the newUTf-8
encoding, without any trouble !
import os; import sys; import Npp; from Npp import notepad filePathSrc="D:\\@@\\763\\Test" # Path to the folder with files to convert for root, dirs, files in os.walk(filePathSrc): for fn in files: if fn[-4:] == '.txt': notepad.open(root + "\\" + fn) console.write(root + "\\" + fn + "\r\n") notepad.runMenuCommand("Encoding", "Convert to UTF-8") notepad.save() notepad.close()
and after executing the script, it wrote, on console :
Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:22:17) [MSC v.1500 32 bit (Intel)] Initialisation took 125ms Ready. D:\@@\763\Test\File_1.txt D:\@@\763\Test\File_2.txt
As you can see, in the script :
-
Of course, I just changed the value of the variable filePathSrc
-
I also changed the line :
notepad.runMenuCommand("Encoding", "Convert to UTF-8 without BOM")
by the line :
notepad.runMenuCommand("Encoding", "Convert to UTF-8")
This detail supposes that @alina-gubanova is using, a very old version of N++ ;-))
Best Regards,
guy038
-
-
@Alina-Gubanova How are you launching the script? Inside of Notepad++?
-
@dail yes.
So these are my steps:
Run -> Python (where I saved C:…\Python2.7\Lib\idlelib\idle.py “$(FULL_CURRENT_PATH)”) -> IDLE opens up in a new window -> press F5 ->Traceback (most recent call last): File "C:\Users\agubanova\Notepad++\plugins\PythonScript\scripts\new script.py", line 3, in <module> import Npp; ImportError: No module named Npp
-
@guy038 thank you so much for putting your time in such a detailed explanation. I should definitely update my N++ version :)
I followed every step of your explanation, and I still get an error. When you Run the script what is the directory that you use?I suspect mine could be wrong. Is it
C:…\Python2.7\Lib\idlelib\idle.py “$(FULL_CURRENT_PATH)”
? -
@Alina-Gubanova said:
So these are my steps
You could have said that in the beginning and saved some time. You can’t run a Pythonscript that way. It isn’t going to know about the special “notepad” objects. You have to run it from the Pythonscript menu, as I said earlier.
-
Hi, @alina-gubanova,
Before, describing the tree structure of my
D:\@à\763
folder, note two points :-
The install folder of a portable N++ version must be different from, either,
C\Program files
andC\Program files (x86)
-
Any local installation of Notepad++ needs the zero-length file,
doLocalConf.xml
, along with the executablenotepad++.exe
This file, installed by default, assures you that any file created and/or handled by Notepad++, will be located inside the installation folder ;-))
Depending of your system, follow one of these links, below, to download the last portable N++
v7.7.1
https://notepad-plus-plus.org/repository/7.x/7.7.1/npp.7.7.1.bin.zip
https://notepad-plus-plus.org/repository/7.x/7.7.1/npp.7.7.1.bin.x64.zip
Just create any folder in your system and extract the contents of the archive in this folder !
On the other hand, I’m using the PythonScript
v1.3.0.0
( PythonScript_Full_1.3.0.0.zip ) but you’ll find the latest releasev1.4.0.0
, below :https://github.com/bruderstein/PythonScript/releases
Note that, from N++ version
v7.6
and above, there’s a new organization of plugins, in thePlugins
folder. From now on, any plugin, let’s saymyFirstPlugin.dll
, must be moved inside a folder named the same way, so myFirstPlugin !
OK, as promised, here is the tree structure of my
D:\@@\763
folder :D:\@@\763 \ | |-- autoCompletion (folder) | \ | |-- ".xml" files | | |-- localization (folder) | \ | |-- ".xml" files | | |-- plugins (folder) | \ | | | |-- Config (folder) | | \ | | | | | |-- Hunspell (folder) | | | \ | | | |-- en_US.aff | | | | | | | |-- en_US.dic | | | | | | | | |-- PythonScript (folder) | | | \ | | | |-- scripts (folder) | | | \ | | | |-- Alina.py ( YOUR script ) | | | | | | | | |-- ".ini" files | | | | | | | | |-- nppPluginList.dll | | | | | |-- doc (folder) | | \ | | |-- PythonScript(folder) | | \ | | |-- _sources (folder) | | | | | |-- _static (folder) | | | | | |-- ".html" files and Miscellaneous files | | | | | |-- DSpellCheck (folder) | | \ | | |-- DSpellCheck.dll | | | | | |-- mineTools (folder) | | \ | | |-- mineTools.dll | | | | | |-- NppConverter (folder) | | \ | | |-- NppConverter.dll | | | | | |-- NppExport (folder) | | \ | | |-- NppExport.dll | | | | | |-- PythonScript (folder) | \ | |-- lib (folder) | | \ | | |-- Sub-folders | | | | | |-- ".py" files | | | | | |-- scripts (folder) | | \ | | |-- Samples (folder) | | | \ | | | |-- ".py" scripts | | | | | |-- startup.py | | | | | |-- PythonScript.dll ( Version 1.3.0.0 ) | | |-- Test | \ | |-- File_1.txt | | | |-- File_2.txt | | | |-- themes (folder) | \ | |-- ".xml" files | | |-- updater (folder) | \ | |-- GUP.exe | | | |-- gup.xml | | | |-- libcurl.dll | | |-- doLocalConf.xml | | |-- Notepad++.exe ( Version 7.6.3 ) | | |-- python27.dll | | |-- SciLexer.dll | | |-- Some ".txt" files | | |-- Some ".xml" CONFIGURATION files
I Just hope that you’ll get some part useful !
Cheers,
guy038
-
-
@Alan-Kilborn I apologize for the confusion. Followed the steps that were suggested by a coworker, so wasn’t aware of the issue. I’ll try running it that way. Thank you for your time
-
@guy038 thank you so much for putting time into this and offering some useful advice! I’ll make sure to follow the steps and let you know!
-
@Alan-Kilborn said:
@Alina-Gubanova said:
So these are my steps
You could have said that in the beginning and saved some time. You can’t run a Pythonscript that way. It isn’t going to know about the special “notepad” objects. You have to run it from the Pythonscript menu, as I said earlier.
My suspicion was correct :)
-
@dail said:
My suspicion was correct
Yes, except technically the OP was launching it from within Notepad++. But…there are degrees of within, and when you are wanting to do operations with Python tight to the Scintilla and Notepad++ cores (the original script used the
notepad
object), you have to be REALLY within. :)-
Run menu : sorta within, but mostly not because it is just telling Notepad++ to launch an external process
-
Pythonscript menu : really within, because it is using the Python interpreter part of the plugin (and can access the
editor
(Scintilla) andnotepad
(N++) objects.
And @dail, I know you know all this … I write it for the edification of other readers. :)
-
-
@Alina-Gubanova said:
I apologize for the confusion. Followed the steps that were suggested by a coworker…
No apology needed – it slowed you down in getting a solution you needed, is all. Didn’t hurt me/us a bit. :)
Never trust those shifty coworkers!! ;)
Write back if you need more help. If you don’t need more help, just upvote the postings here that helped you most.
-
@Alan-Kilborn Just to be very clear: I save the script that I need and then run it directly from the Pythonscript menu:
Plugins -> Python Scropt -> Scripts -> nameofmyscript.
Tried it just now, it seems like nothing is happening. It just opens a new window new1. Console is empty as well.
What step am I missing? -
I think you are on the right track for running your script now.
I presume you are trying to run the original script you posted? If that’s the case, I don’t see any reason why a new1 window would be opened. Perhaps you should add some more console.write() statements to the script to attempt to track control flow?
-
@Alan-Kilborn Now I just get
Traceback (most recent call last): File "C:\...\Notepad++\plugins\PythonScript\scripts\convertutf8.py", line 14, in <module> console.write() Boost.Python.ArgumentError: Python argument types in Console.write(Console) did not match C++ signature: write(class NppPythonScript::PythonConsole {lvalue}, class boost::python::api::object)
when I added some console.write() -
Well, from the error message I’d assume that you put
console.write()
directly in your code. What I mean was to put something likeconsole.write('got here!')
at a strategic place or putting a variable name inside the parens, or…just in general some debugging techniques that one might do when programming Python without an IDE.Like @guy038, when I run your original script on some test files, it seems to do what you intend.
I’m assuming you got this working script from a coworker as you hinted before. Perhaps asking him/her for help getting it going is a better path than us trying to help you from afar.
-
@Alan-Kilborn Okay, will do! Thank you again!
-
Hello, @alina-gubanova,
I don’t really understand why you cannot get it straight. It should be practically obvious !
-
Create a folder, outside
C\Program files...
, on your configuration -
Install a recent portable N++ version by extracting the archive’s contents inside this folder
-
Install a recent PythonScript release, by extracting the archive’s contents inside this folder
-
Verify that the tree structure, of this new installation folder of N++, is like in my previous post
-
Open Notepad++
-
Select the option
Plugins > PythonScript > New Script
-
Enter a name for your script, let’s say
Alina
and click on the Save button
=> A new tab,
Alina.py
is, then, displayed- Paste the contents of your script, below, changing, of course, the value of the
filePathSrc
variable
import os; import sys; import Npp; from Npp import notepad filePathSrc="X:\\xxxxxxxxxxxxt" # Path to the folder with files to convert for root, dirs, files in os.walk(filePathSrc): for fn in files: if fn[-4:] == '.txt': notepad.open(root + "\\" + fn) console.write(root + "\\" + fn + "\r\n") notepad.runMenuCommand("Encoding", "Convert to UTF-8") notepad.save() notepad.close()
-
Save the
Alina.py
Python file -
Close and restart Notepad++ ( IMPORTANT as your script will be found, inside the Python files list)
-
Choose the option
Plugins > PythonScript > Show Console
, just to visualize possible errors -
Then, run your script, by selecting the option
Plugins > PythonScript > Scripts > Alina
=> The absolute paths of all the files of your folder should be displayed on the Python console
Done ! Here we are ;-))
Best Regards,
guy038
-