# Slicer-Python Packages Use and Install

**URL:** <https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984>\
**Category:** Support\
**Created:** [August 31, 2017, 9:27pm UTC](https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984 "2017-08-31T21:27:14Z")\
**Posts on this page:** 9\
**Page:** 4

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [August 27, 2019, 2:52am UTC](https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984/66 "2019-08-27T02:52:01Z")

</div>

Python wrapping of gmsh is quite messy. There are many python wrappers, they all work slightly differently and a few of those that I tried fail in various ways.

[pygmsh](https://pypi.org/project/pygmsh/) is a quite simple one, which uses an installed gmsh executable and it seems to work for me. For example, this generates a mesh:

```python
import pygmsh

geom = pygmsh.opencascade.Geometry(
  characteristic_length_min=0.1,
  characteristic_length_max=0.1,
  )

rectangle = geom.add_rectangle([-1.0, -1.0, 0.0], 2.0, 2.0)
disk1 = geom.add_disk([-1.2, 0.0, 0.0], 0.5)
disk2 = geom.add_disk([+1.2, 0.0, 0.0], 0.5)
union = geom.boolean_union([rectangle, disk1, disk2])

disk3 = geom.add_disk([0.0, -0.9, 0.0], 0.5)
disk4 = geom.add_disk([0.0, +0.9, 0.0], 0.5)
flat = geom.boolean_difference([union], [disk3, disk4])

geom.extrude(flat, [0, 0, 0.3])

mesh = pygmsh.generate_mesh(geom, gmsh_path="c:/Users/andra/util/gmsh/gmsh.exe", msh_filename="c:/Users/andra/tmp/test.vtk", mesh_file_type="vtk")

```

---

<div class="post-metadata">

**Author:** ![Saima](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@Saima](https://discourse.slicer.org/u/Saima)\
**Post date:** [August 30, 2019, 3:16am UTC](https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984/67 "2019-08-30T03:16:42Z")

</div>

Hi Andras,  
Sorry for asking a question about pygmsh. What if you want to load a geometry from file and not create it using the opencascade. I searched much in the google but couldnt find anything on this? Could you guide me please. any related documentation which can help me.

Regards,  
Saima Safdar

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [August 30, 2019, 7:41pm UTC](https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984/68 "2019-08-30T19:41:07Z")

</div>

Simplest is probably to write the model to file and run gmsh on that. Then read the output file to Slicer.

---

<div class="post-metadata">

**Author:** ![Saima](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@Saima](https://discourse.slicer.org/u/Saima)\
**Post date:** [March 10, 2020, 5:38am UTC](https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984/69 "2020-03-10T05:38:50Z")

</div>

Hi andras,  
I am getting the error for installing  
import pip

> > > pip.main([‘install’, ‘numpy-stl’])

Traceback (most recent call last):

File “”, line 1, in

AttributeError: module ‘pip’ has no attribute ‘main’

what am i missing???

Regards,  
Saima Safdar

---

<div class="post-metadata">

**Author:** ![Saima](https://avatars.discourse-cdn.com/v4/letter/s/9d8465/32.png) [@Saima](https://discourse.slicer.org/u/Saima)\
**Post date:** [March 10, 2020, 5:41am UTC](https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984/70 "2020-03-10T05:41:02Z")

</div>

> [@jamesobutler](#):
>
> slicer.util.pip\_install(‘pynrrd’)

resolved I used this.  
slicer.util.pip\_install(‘numpy-stl’)

Didnt understand why main not worked.

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [March 10, 2020, 12:47pm UTC](https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984/71 "2020-03-10T12:47:36Z")

</div>

> [@Saima](#):
>
> AttributeError: module ‘pip’ has no attribute ‘main’
> 
> what am i missing???

`pip` has not been exposing `main` for a really long time (since pip 9.x; while current pip version is 19.x). You can use the current pip API or the slicer.util helper function that you have found.

By the way, you should not need numpy-stl for loading/saving models. You can use `slicer.util.loadModel('something.stl')` and `slicer.util.saveNode('something2.stl')` instead.

---

<div class="post-metadata">

**Author:** ![WilliamLambert1205](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/williamlambert1205/32/16334_2.png) [@WilliamLambert1205](https://discourse.slicer.org/u/WilliamLambert1205)\
**Post date:** [March 31, 2023, 12:39pm UTC](https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984/72 "2023-03-31T12:39:44Z")

</div>

Hi everyone,  
I tried to install matplotlib in slicer 5.3.0 and 5.1.0, returns a lot error like this, too long to paste

> > > import pip  
> > > pip.main([‘install’, ‘matplotlib’])  
> > > WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.  
> > > Please see [https://github.com/pypa/pip/issues/5599](https://github.com/pypa/pip/issues/5599) for advice on fixing the underlying issue.  
> > > To avoid this problem you can invoke Python with ‘-m pip’ instead of running pip directly.  
> > > — Logging error —  
> > > Traceback (most recent call last):  
> > > File “”, line 60, in emit  
> > > KeyError: 15  
> > > Call stack:  
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\code.py”, line 258, in push  
> > > more = self.runsource(source, self.filename)  
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\code.py”, line 74, in runsource  
> > > self.runcode(code)  
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\code.py”, line 90, in runcode  
> > > exec(code, self.locals)  
> > > File “”, line 1, in   
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\site-packages\pip\__init_\_.py”, line 13, in main  
> > > return _wrapper(args)  
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\site-packages\pip\_internal\utils\entrypoints.py”, line 43, in wrapper  
> > > return main(args)  
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\site-packages\pip\_internal\cli\main.py”, line 55, in main  
> > > cmd\_name, cmd\_args = parse\_command(args)  
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\site-packages\pip\_internal\cli\main\_parser.py”, line 79, in parse\_command  
> > > general\_options, args\_else = parser.parse\_args(args)  
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\optparse.py”, line 1371, in parse\_args  
> > > values = self.get\_default\_values()  
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\site-packages\pip\_internal\cli\parser.py”, line 279, in get\_default\_values  
> > > self.config.load()  
> > > …  
> > > …  
> > > packages\pip\_internal\cli\base\_command.py", line 216, in main  
> > > self.handle\_pip\_version\_check(options)  
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\site-packages\pip\_internal\cli\req\_command.py”, line 190, in handle\_pip\_version\_check  
> > > pip\_self\_version\_check(session, options)  
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\site-packages\pip\_internal\self\_outdated\_check.py”, line 238, in pip\_self\_version\_check  
> > > logger.warning(“There was an error checking the latest version of pip.”)  
> > > File "D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\logging\_init.py", line 1458, in warning  
> > > self.log(WARNING, msg, args, \*\*kwargs)  
> > > File "D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\logging\_init.py", line 1589, in log  
> > > self.handle(record)  
> > > File "D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\logging\_init.py", line 1599, in handle  
> > > self.callHandlers(record)  
> > > File "D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\logging\_init.py", line 1661, in callHandlers  
> > > hdlr.handle(record)  
> > > File "D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\logging\_init_.py", line 952, in handle  
> > > self.emit(record)  
> > > File “D:\Slicer 5.3.0-2022-12-16\lib\Python\Lib\site-packages\pip\_internal\utils\logging.py”, line 179, in emit  
> > > self.handleError(record)  
> > > Message: ‘There was an error checking the latest version of pip.’  
> > > Arguments: ()  
> > > 1

---

<div class="post-metadata">

**Author:** ![Sam\_Horvath](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/sam_horvath/32/3092_2.png) [@Sam\_Horvath](https://discourse.slicer.org/u/Sam_Horvath)\
**Post date:** [March 31, 2023, 3:17pm UTC](https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984/73 "2023-03-31T15:17:34Z")

</div>

Please try using the `slicer.util` helper function, i.e.

```auto
slicer.util.pip_install('matplotlib')

```

---

<div class="post-metadata">

**Author:** ![lassoan](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.slicer.org/lassoan/32/13_2.png) [@lassoan](https://discourse.slicer.org/u/lassoan)\
**Post date:** [May 8, 2023, 5:18am UTC](https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984/74 "2023-05-08T05:18:15Z")

</div>

2 posts were split to a new topic: [Cannot import gmsh Python package](https://discourse.slicer.org/t/cannot-import-gmsh-python-package/29344)

[Previous page](https://discourse.slicer.org/t/slicer-python-packages-use-and-install/984.md?page=3)
