Describe the bug
__file__ variable in python scipts is pointing to __init__.py instead of the respective script file.
To Reproduce
Steps to reproduce the behavior:
- Make file 'temp_0.py'
print("__file__")
print(__file__)
- run file through pymol
__init__.py. I uses a short described below to simply run pymol temp_0.py Equivalently, you can run python /path/to/pymol/__init__.py temp_0.py
Expected behavior
Currently __file__ points to __init__.py, not temp_0.py. __file__ in temp_0.py should point totemp_0.py
I'm not exactly sure where the exec() function is in the pymol code, but essentially when you convert the temp_0.py file to a string and pass it to exec you need to modify the namespace you pass to the exec function such that __file__ points to the path of whatever you're converting to a string.
Something like this, but be careful of whether you feed it to globals or locals and it'll probably modifying the __file__ in some pre-existing namespace. Not sure about the details...
path = "/home/user/documents/folder/temp_0.py"
path = fix_path(path)
exec_str = file_to_str(path)
namespace = {"__file__": path,}
exec(exec_str, namespace)
Environment
- PyMOL Version: 3.1.0a0
- PyMOL Source: compiled from this repo
- Operating System: Linux Mint
- If you are using a conda environment, please supply your
conda list:
# packages in environment at /opt/.miniconda/envs/protein_pymol:
#
# Name Version Build Channel
_libgcc_mutex 0.1 conda_forge conda-forge
_openmp_mutex 4.5 2_gnu conda-forge
brotli 1.1.0 hb9d3cd8_2 conda-forge
brotli-bin 1.1.0 hb9d3cd8_2 conda-forge
brotli-python 1.1.0 py313h46c70d0_2 conda-forge
bzip2 1.0.8 h4bc722e_7 conda-forge
ca-certificates 2024.12.14 hbcca054_0 conda-forge
cairo 1.18.2 h3394656_1 conda-forge
cctbx-base 2024.12 pypi_0 pypi
certifi 2024.12.14 pyhd8ed1ab_0 conda-forge
cffi 1.17.1 py313hfab6e84_0 conda-forge
chardet 5.2.0 py313h78bf25f_2 conda-forge
charset-normalizer 3.4.1 pyhd8ed1ab_0 conda-forge
cmake 3.31.4 pypi_0 pypi
contourpy 1.3.1 py313h33d0bda_0 conda-forge
cycler 0.12.1 pyhd8ed1ab_1 conda-forge
font-ttf-dejavu-sans-mono 2.37 hab24e00_0 conda-forge
font-ttf-inconsolata 3.000 h77eed37_0 conda-forge
font-ttf-source-code-pro 2.038 h77eed37_0 conda-forge
font-ttf-ubuntu 0.83 h77eed37_3 conda-forge
fontconfig 2.15.0 h7e30c49_1 conda-forge
fonts-conda-ecosystem 1 0 conda-forge
fonts-conda-forge 1 0 conda-forge
fonttools 4.55.3 py313h8060acc_1 conda-forge
freetype 2.12.1 h267a509_2 conda-forge
freetype-py 2.3.0 pyhd8ed1ab_0 conda-forge
future 1.0.0 pyhd8ed1ab_1 conda-forge
h2 4.1.0 pyhd8ed1ab_1 conda-forge
hpack 4.0.0 pyhd8ed1ab_1 conda-forge
hyperframe 6.0.1 pyhd8ed1ab_1 conda-forge
icu 75.1 he02047a_0 conda-forge
idna 3.10 pyhd8ed1ab_1 conda-forge
kiwisolver 1.4.7 py313h33d0bda_0 conda-forge
lcms2 2.16 hb7c19ff_0 conda-forge
ld_impl_linux-64 2.43 h712a8e2_2 conda-forge
lerc 4.0.0 h27087fc_0 conda-forge
libblas 3.9.0 26_linux64_openblas conda-forge
libboost 1.86.0 h6c02f8c_3 conda-forge
libboost-python 1.86.0 py313hf0ab243_3 conda-forge
libbrotlicommon 1.1.0 hb9d3cd8_2 conda-forge
libbrotlidec 1.1.0 hb9d3cd8_2 conda-forge
libbrotlienc 1.1.0 hb9d3cd8_2 conda-forge
libcblas 3.9.0 26_linux64_openblas conda-forge
libdeflate 1.23 h4ddbbb0_0 conda-forge
libdrm 2.4.124 hb9d3cd8_0 conda-forge
libegl 1.7.0 ha4b6fd6_2 conda-forge
libexpat 2.6.4 h5888daf_0 conda-forge
libffi 3.4.2 h7f98852_5 conda-forge
libgcc 14.2.0 h77fa898_1 conda-forge
libgcc-ng 14.2.0 h69a702a_1 conda-forge
libgfortran 14.2.0 h69a702a_1 conda-forge
libgfortran5 14.2.0 hd5240d6_1 conda-forge
libgl 1.7.0 ha4b6fd6_2 conda-forge
libglib 2.82.2 h2ff4ddf_1 conda-forge
libglu 9.0.3 h03adeef_0 conda-forge
libglvnd 1.7.0 ha4b6fd6_2 conda-forge
libglx 1.7.0 ha4b6fd6_2 conda-forge
libgomp 14.2.0 h77fa898_1 conda-forge
libiconv 1.17 hd590300_2 conda-forge
libjpeg-turbo 3.0.0 hd590300_1 conda-forge
liblapack 3.9.0 26_linux64_openblas conda-forge
liblzma 5.6.3 hb9d3cd8_1 conda-forge
libmpdec 4.0.0 h4bc722e_0 conda-forge
libopenblas 0.3.28 pthreads_h94d23a6_1 conda-forge
libpciaccess 0.18 hd590300_0 conda-forge
libpng 1.6.45 h943b412_0 conda-forge
libsqlite 3.48.0 hee588c1_0 conda-forge
libstdcxx 14.2.0 hc0a3c3a_1 conda-forge
libstdcxx-ng 14.2.0 h4852527_1 conda-forge
libsvm 335 h5888daf_1 conda-forge
libtiff 4.7.0 hd9ff511_3 conda-forge
libuuid 2.38.1 h0b41bf4_0 conda-forge
libwebp-base 1.5.0 h851e524_0 conda-forge
libxcb 1.17.0 h8a09558_0 conda-forge
libzlib 1.3.1 hb9d3cd8_2 conda-forge
matplotlib-base 3.10.0 py313h129903b_0 conda-forge
mrcfile 1.5.3 pyhd8ed1ab_1 conda-forge
munkres 1.1.4 pyh9f0ad1d_0 conda-forge
ncurses 6.5 h2d0b736_2 conda-forge
numpy 2.2.2 py313h17eae1a_0 conda-forge
openjpeg 2.5.3 h5fbd93e_0 conda-forge
openssl 3.4.0 h7b32b05_1 conda-forge
packaging 24.2 pyhd8ed1ab_2 conda-forge
pandas 2.2.3 pypi_0 pypi
pcre2 10.44 hba22ea6_2 conda-forge
pillow 11.1.0 py313h8db990d_0 conda-forge
pip 24.3.1 pyh145f28c_2 conda-forge
pixman 0.44.2 h29eaf8c_0 conda-forge
psutil 6.1.1 py313h536fd9c_0 conda-forge
pthread-stubs 0.4 hb9d3cd8_1002 conda-forge
pycairo 1.27.0 py313h112314f_0 conda-forge
pycparser 2.22 pyh29332c3_1 conda-forge
pymol 3.1.0a0 pypi_0 pypi
pyparsing 3.2.1 pyhd8ed1ab_0 conda-forge
pyqt5 5.15.11 pypi_0 pypi
pyqt5-qt5 5.15.16 pypi_0 pypi
pyqt5-sip 12.16.1 pypi_0 pypi
pysocks 1.7.1 pyha55dd90_7 conda-forge
python 3.13.1 ha99a958_105_cp313 conda-forge
python-dateutil 2.9.0.post0 pyhff2d567_1 conda-forge
python_abi 3.13 5_cp313 conda-forge
pytz 2024.2 pypi_0 pypi
qhull 2020.2 h434a139_5 conda-forge
readline 8.2 h8228510_1 conda-forge
reportlab 4.2.5 py313h536fd9c_0 conda-forge
requests 2.32.3 pyhd8ed1ab_1 conda-forge
rlpycairo 0.2.0 pyhd8ed1ab_0 conda-forge
scipy 1.15.1 py313h750cbce_0 conda-forge
setuptools 75.8.0 pypi_0 pypi
six 1.17.0 pyhd8ed1ab_0 conda-forge
tk 8.6.13 noxft_h4845f30_101 conda-forge
tzdata 2025.1 pypi_0 pypi
unitment 0.0.9 pypi_0 pypi
urllib3 2.3.0 pyhd8ed1ab_0 conda-forge
xorg-libice 1.1.2 hb9d3cd8_0 conda-forge
xorg-libsm 1.2.5 he73a12e_0 conda-forge
xorg-libx11 1.8.10 h4f16b4b_1 conda-forge
xorg-libxau 1.0.12 hb9d3cd8_0 conda-forge
xorg-libxdamage 1.1.6 hb9d3cd8_0 conda-forge
xorg-libxdmcp 1.1.5 hb9d3cd8_0 conda-forge
xorg-libxext 1.3.6 hb9d3cd8_0 conda-forge
xorg-libxfixes 6.0.1 hb9d3cd8_0 conda-forge
xorg-libxrender 0.9.12 hb9d3cd8_0 conda-forge
xorg-libxxf86vm 1.1.6 hb9d3cd8_0 conda-forge
zstandard 0.23.0 py313h80202fe_1 conda-forge
zstd 1.5.6 ha6fb4c9_0 conda-forge
Additional context
My pymol short cut does run through __init__.py
if [ ! -d ~/bin ]; then mkdir ~/bin; fi;
echo '#!/bin/sh' > ~/bin/pymol
echo exec \"/opt/.miniconda/envs/protein_pymol/bin/python\" \"$(( python -c "import site; print(site.getsitepackages()[0])" ) >&1)/pymol/__init__.py\" \"\$@\" >> ~/bin/pymol
chmod 777 ~/bin/pymol
Describe the bug
__file__variable in python scipts is pointing to__init__.pyinstead of the respective script file.To Reproduce
Steps to reproduce the behavior:
__init__.py. I uses a short described below to simply runpymol temp_0.pyEquivalently, you can runpython /path/to/pymol/__init__.py temp_0.pyExpected behavior
Currently
__file__points to__init__.py, nottemp_0.py.__file__intemp_0.pyshould point totemp_0.pyI'm not exactly sure where the
exec()function is in the pymol code, but essentially when you convert thetemp_0.pyfile to a string and pass it toexecyou need to modify the namespace you pass to theexecfunction such that__file__points to the path of whatever you're converting to a string.Something like this, but be careful of whether you feed it to globals or locals and it'll probably modifying the
__file__in some pre-existing namespace. Not sure about the details...Environment
conda list:Additional context
My pymol short cut does run through
__init__.py