hi folks,
I hope someone can help me.
First, I want to add pypi.org packages /modules and have it available to import on script.py executed from RUNPY or BASIC py function.
How to do it fom within Universe ?
Second, I want to distribute our own modules with my basic application. (It's a type19 file (directory) with .py files, each one is a 'module'.)
how to deploy it into u2python ?
many thanks
------------------------------
Manu Fernandes
------------------------------
Manu,
There are a lot of options to he pip module, and many ways to get all the needed packages loaded, so I will not focus on that but more of the underlying question on how to pip install from a Python program launched from UniVerse.
You mention that you have a script.py program that will pip install the package.
To run from UniVerse, put it into a Directory type file ( like PP in the XDEMO account ), and then do the RUNPY command:
As for the question on how to deploy your modules, I suggest you go with creating your own .pth file in the UniVerse Python directory ( i.e. same location as the u2.pth that by default would be in C:\\U2\\UV\\python on windows )
I put a much longer description in another thread which may help
Yet the other post had to deal with having multiple Python modules with the same name in the sys.path.
------------------------------
Mike Rajkowski
MultiValue Product Evangelist
Rocket Internal - All Brands
US
------------------------------
Manu,
There are a lot of options to he pip module, and many ways to get all the needed packages loaded, so I will not focus on that but more of the underlying question on how to pip install from a Python program launched from UniVerse.
You mention that you have a script.py program that will pip install the package.
To run from UniVerse, put it into a Directory type file ( like PP in the XDEMO account ), and then do the RUNPY command:
As for the question on how to deploy your modules, I suggest you go with creating your own .pth file in the UniVerse Python directory ( i.e. same location as the u2.pth that by default would be in C:\\U2\\UV\\python on windows )
I put a much longer description in another thread which may help
Yet the other post had to deal with having multiple Python modules with the same name in the sys.path.
------------------------------
Mike Rajkowski
MultiValue Product Evangelist
Rocket Internal - All Brands
US
------------------------------
hello Mike,
thank you for the reply.
so, here my context.
I develop a uv app which include his own py module and pypi.org module requirements, listed on a requirement.txt file.
at install/upgrade, I'll install all my pypi.org requirements.
I suggest launch pip install -r path\\requirements.txt from basic EXECUTE.
what's your advice to run it in correlation with uv/python installation !
(I do not known if the machine run another py env !)
many thanks,
------------------------------
Manu Fernandes
------------------------------
Manu,
There are a lot of options to he pip module, and many ways to get all the needed packages loaded, so I will not focus on that but more of the underlying question on how to pip install from a Python program launched from UniVerse.
You mention that you have a script.py program that will pip install the package.
To run from UniVerse, put it into a Directory type file ( like PP in the XDEMO account ), and then do the RUNPY command:
As for the question on how to deploy your modules, I suggest you go with creating your own .pth file in the UniVerse Python directory ( i.e. same location as the u2.pth that by default would be in C:\\U2\\UV\\python on windows )
I put a much longer description in another thread which may help
Yet the other post had to deal with having multiple Python modules with the same name in the sys.path.
------------------------------
Mike Rajkowski
MultiValue Product Evangelist
Rocket Internal - All Brands
US
------------------------------
then,
I develop a uv app which include his own py module.
I'll define a myapp.pth file into site directory to declare my module's path into sys.path at uvsession start.
so, I do this :
MYMODULEPATH = "accountName.path\\/filename"
builtins.py=PyImport('builtins')
site.py=PyImport('site')
sitepackages = PyCallMethod(site.py,'getsitepackages')
sitepackages = PyCallMethod(builtins.py,'str',sitepackages)
convert ",[]'" to @am in sitepackages
loop
remove sitepack from sitepackages setting eos
if upcase(sitepack[13]) = 'SITE-PACKAGES' then
sitepack = trim(change(sitepack,'\\\\','\\'))
openpath sitepack to f.sitepack then
write MYMODULEPATH on f.sitepack,'myapp.pth'
exit
end
while eos do repeat
if sitepack = '' then print 'error: u2python site-packages not found'
I use .../site-packges because on Linux, site does not search sys.prefix but (sys.prefix + "/lib/site-packages").
Do you have another idea to deploy easily ?
many thanks
------------------------------
Manu Fernandes
------------------------------
hello Mike,
thank you for the reply.
so, here my context.
I develop a uv app which include his own py module and pypi.org module requirements, listed on a requirement.txt file.
at install/upgrade, I'll install all my pypi.org requirements.
I suggest launch pip install -r path\\requirements.txt from basic EXECUTE.
what's your advice to run it in correlation with uv/python installation !
(I do not known if the machine run another py env !)
many thanks,
------------------------------
Manu Fernandes
------------------------------
Manu,
Running the pip from an basic EXECUTE should work, yet I prefer to launch pip from the python shell.
i.e.
python -m pip install module_name
The reason for this is that if there is a newer version of the module in pypi.org for a different version of python pip may pick up the wrong version ( this is based on how the module was created )
Either way, I would recommend logging off after installing/upgrading packages from BASIC, since you would have to script a lot more to check if python was in fact running in the U2 process at the time you modified the packages.
------------------------------
Mike Rajkowski
MultiValue Product Evangelist
Rocket Internal - All Brands
US
------------------------------
hello Mike,
thank you for the reply.
so, here my context.
I develop a uv app which include his own py module and pypi.org module requirements, listed on a requirement.txt file.
at install/upgrade, I'll install all my pypi.org requirements.
I suggest launch pip install -r path\\requirements.txt from basic EXECUTE.
what's your advice to run it in correlation with uv/python installation !
(I do not known if the machine run another py env !)
many thanks,
------------------------------
Manu Fernandes
------------------------------
Hi Manu,
With respect to the following:
"... launch pip install -r path\\requirements.txt... (I do not known if the machine run another py env !)"
- This should work fine, just make sure to use the full path to the pip program that ships with UV. For example
/usr/uv/python/bin/pip3 install -r path/requirements.txt
- This way, your modules will end up in the site-packages directory for UV's python installation (and not the site-packages of some other python installation that might be installed on the machine).
------------------------------
Steven Wingfield
Principal Software Engineer
Rocket Software
College Station, TX, USA
------------------------------
then,
I develop a uv app which include his own py module.
I'll define a myapp.pth file into site directory to declare my module's path into sys.path at uvsession start.
so, I do this :
MYMODULEPATH = "accountName.path\\/filename"
builtins.py=PyImport('builtins')
site.py=PyImport('site')
sitepackages = PyCallMethod(site.py,'getsitepackages')
sitepackages = PyCallMethod(builtins.py,'str',sitepackages)
convert ",[]'" to @am in sitepackages
loop
remove sitepack from sitepackages setting eos
if upcase(sitepack[13]) = 'SITE-PACKAGES' then
sitepack = trim(change(sitepack,'\\\\','\\'))
openpath sitepack to f.sitepack then
write MYMODULEPATH on f.sitepack,'myapp.pth'
exit
end
while eos do repeat
if sitepack = '' then print 'error: u2python site-packages not found'
I use .../site-packges because on Linux, site does not search sys.prefix but (sys.prefix + "/lib/site-packages").
Do you have another idea to deploy easily ?
many thanks
------------------------------
Manu Fernandes
------------------------------
Manu,
That is as good of a solution as any. Especially for those who want to do this from BASIC.
------------------------------
Mike Rajkowski
MultiValue Product Evangelist
Rocket Internal - All Brands
US
------------------------------
then,
I develop a uv app which include his own py module.
I'll define a myapp.pth file into site directory to declare my module's path into sys.path at uvsession start.
so, I do this :
MYMODULEPATH = "accountName.path\\/filename"
builtins.py=PyImport('builtins')
site.py=PyImport('site')
sitepackages = PyCallMethod(site.py,'getsitepackages')
sitepackages = PyCallMethod(builtins.py,'str',sitepackages)
convert ",[]'" to @am in sitepackages
loop
remove sitepack from sitepackages setting eos
if upcase(sitepack[13]) = 'SITE-PACKAGES' then
sitepack = trim(change(sitepack,'\\\\','\\'))
openpath sitepack to f.sitepack then
write MYMODULEPATH on f.sitepack,'myapp.pth'
exit
end
while eos do repeat
if sitepack = '' then print 'error: u2python site-packages not found'
I use .../site-packges because on Linux, site does not search sys.prefix but (sys.prefix + "/lib/site-packages").
Do you have another idea to deploy easily ?
many thanks
------------------------------
Manu Fernandes
------------------------------
Hi Manu,
Your example is indeed a good way to make your modules available to UV's python.
An alternative, which follows a more traditional installation workflow, is to put your module into a package, and then use pip install path/to/package.
Here is a video describing packaging code into a python package: https://www.youtube.com/watch?v=GaWs-LenLYE
In summary,
- Create the following directory structure for your code
mypypackage/
├── mypymodule
│ ├── __init__.py
│ └── mypycode.py
└── setup.py
Where
mypycode.py (for example) holds your code:
def mypyfunction():
print("howdy from mypyfunction!")
__init__.py can be empty:
setup.py describes your package:
from setuptools import find_packages
from setuptools import setup
setup(
name='mypymodule',
version='1.0.0',
description='my py module',
packages=find_packages(),
)
Then, you can execute (via BASIC EXECUTE, or however you prefer) the following:
/usr/uv/python/bin/pip install /path/to/mypypackage/
which will install your package into UV python's site-packages directory
Output:
/usr/uv/XDEMO $ /usr/uv/bin/uv
Welcome to the XDEMO Account
python> from mypymodule import mypycode
python> mypycode.mypyfunction()
howdy from mypyfunction!
------------------------------
Steven Wingfield
Principal Software Engineer
Rocket Software
College Station, TX, USA
------------------------------