iMolpro 2025.2.0
ウェブページ
https://github.com/molpro/iMolpro
バージョン
2025.2.0
ビルド環境
-
ビルドに必要なファイル
- Chooser.py.diff
--- Chooser.py.org 2025-10-29 14:48:32.515824489 +0900
+++ Chooser.py 2025-10-29 14:49:00.013448729 +0900
@@ -19,6 +19,7 @@
from ProjectWindow import ProjectWindow
from WindowManager import WindowManager
from settings import settings, settings_edit
+from pysjef import recent_project
class PushButton(QPushButton):
@@ -209,7 +210,7 @@
item.widget().setParent(None)
self.recent_project_box.layout().addWidget(QLabel('Open a recently-used project:'), 0, QtCore.Qt.AlignLeft)
for i in range(1, max_items):
- f = pymolpro.recent_project('molpro', i)
+ f = recent_project('molpro', i)
if f:
button = RecentProjectButton(f, i, self)
self.recent_project_box.layout().addWidget(button, -1, QtCore.Qt.AlignLeft)
- RecentMenu.py.diff
--- RecentMenu.py.org 2025-10-29 14:49:04.987378227 +0900
+++ RecentMenu.py 2025-10-29 14:49:35.470946141 +0900
@@ -3,6 +3,7 @@
import pymolpro
from PyQt5.QtWidgets import QMenu, QAction
+from pysjef import recent_project
class RecentMenuAction(QAction):
@@ -32,7 +33,7 @@
self.recentProjects.clear()
self.clear()
for i in range(1, max_items+1):
- f = pymolpro.recent_project('molpro', i)
+ f = recent_project('molpro', i)
if f:
action = RecentMenuAction(self, self.windowManager, f)
self.recentProjects.append((f, action))
- iMolpro.py.diff
--- iMolpro.py.org 2025-10-30 10:03:03.408257254 +0900
+++ iMolpro.py 2025-10-30 10:03:21.086087361 +0900
@@ -10,6 +10,7 @@
import os
import platform
import logging
+import re
if __name__ == '__main__':
@@ -61,7 +62,11 @@
if 'CONDA_PREFIX' not in os.environ:
os.environ['CONDA_PREFIX'] = os.path.dirname(os.path.abspath(__file__))
elif 'PATH' in os.environ and 'SHELL' in os.environ:
- os.environ['PATH'] = os.popen(os.environ['SHELL'] + " -l -c 'echo $PATH'").read() + ':' + os.environ[
+ if re.search( 'csh', os.environ['SHELL'] ):
+ myopts = " -c 'echo $PATH'"
+ else:
+ myopts = " -l -c 'echo $PATH'"
+ os.environ['PATH'] = os.popen(os.environ['SHELL'] + myopts).read() + ':' + os.environ[
'PATH'] # make PATH just as if running from shell
except Exception as e:
msg = QMessageBox()
- build.sh.diff
--- build.sh.org 2025-10-29 14:24:13.679985528 +0900
+++ build.sh 2025-10-29 14:25:43.049738279 +0900
@@ -2,11 +2,11 @@
pkgbuild=1
#dmg=1
-#tar=1
+tar=1
sh=1
if [ -z "$NOCONDA" ]; then
-conda install -c conda-forge -c defaults -y --file=requirements.txt python=3.12 scipy=1.11 || exit 1
+#conda install -c conda-forge -c defaults -y --file=requirements.txt python=3.12 scipy=1.11 || exit 1
conda remove -y pubchempy
pip install -I https://github.com/molpro/PubChemPy/archive/refs/heads/master.zip
gem install --user-install -n~/bin fpm
@@ -51,8 +51,8 @@
--add-data Molpro_Logo_Molpro_Quantum_Chemistry_Software.png:. \
--add-data README.md:. \
--add-data doc:./doc \
+ --add-data ${PYMOLPRO}/molpro_input.json:./pymolpro/ \
--add-data "${versionfile}":. \
- --add-data $builddir/molpro:./molpro \
$pyinstaller_opt \
iMolpro.py || exit 1
sed -i -e '$d' iMolpro.spec
@@ -135,25 +135,4 @@
if [ ! -z "$tar" ]; then
tar cjf dist/iMolpro-"${descriptor}".tar.bz2 -C dist iMolpro
fi
- if [ ! -z "$sh" ]; then
- prefix='/usr'
- echo '#!/bin/sh' > ${builddir}/preinstall
- echo "more <<'EOF'" >> ${builddir}/preinstall
- cat ./Package-README.md ./Package-license.md | sed -e 's/^##* *//' -e 's/\[//g' -e 's/\] *(/, /g' -e 's/))/@@/g' -e 's/)//g' -e 's/@@/)/g' -e 's/\*//g' >> ${builddir}/preinstall
- echo "EOF" >> ${builddir}/preinstall
- echo "echo 'Accept license[yN]?'" >> ${builddir}/preinstall
- echo "exec 0</dev/tty" >> ${builddir}/preinstall
- echo "read response" >> ${builddir}/preinstall
- echo 'if [ x"$response" != xy -a x"$response" != xY ]; then kill $$ ; fi' >> ${builddir}/preinstall
- echo '#!/bin/sh' > ${builddir}/postinstall
-# echo 'env' >> ${builddir}/postinstall
- echo "ln -sf ${prefix}/libexec/iMolpro/iMolpro ${prefix}/bin/iMolpro" >> ${builddir}/postinstall
- if [[ "$version" =~ "[0-9]*\.[0-9]*\.[0-9]*" ]] ; then true ; else version="0.0.0" ; fi
- echo version=$version
- for type in deb rpm ; do
- rm -f dist/iMolpro-"${descriptor}".${type}
- dash='-'; if [ $type = rpm ]; then dash='_'; fi
- fpm -s dir -C dist -t ${type} -p dist/iMolpro-"${descriptor}".${type} -v "${version}" -n iMolpro --prefix=${prefix}/libexec --before-install ${builddir}/preinstall --after-install ${builddir}/postinstall iMolpro
- done
- fi
fi
- environment.yml
name: imolpro_build
channels:
- conda-forge
dependencies:
- python=3.12
- pyqt>=5.15
- pyqtwebengine>=5.15
- pyinstaller>=6
- pymolpro>=1.13.2
- pubchempy>=1
- chemspipy>=2
- scipy<1.13
- git=2.45
- libboost=1.84.0
- pysjef>=1.40.0
- certifi>=2024.8.30
ビルド手順
#!/bin/sh
VERSION=2025.2.0
#INSTALL_DIR=/apl/imolpro/${VERSION}BASEDIR=/home/users/${USER}/Software/iMolpro/${VERSION}
MINIFORGE_VER=25.3.1-0
MINIFORGE=Miniforge3-${MINIFORGE_VER}-Linux-x86_64.sh
MINIFORGE_URL=https://github.com/conda-forge/miniforge/releases/download/${MINIFORGE_VER}/${MINIFORGE}
IMOLPRO_GIT=https://github.com/molpro/iMolpro.git
IMOLPRO_TAG=refs/tags/${VERSION}WORKDIR=/gwork/users/${USER}
WORKDIR_TMP=${WORKDIR}/tmp
WORKNAME=iMolproPATCH=${BASEDIR}/build.sh.diff
CONDAENV_YML=environment.yml
CONDAENV=${BASEDIR}/${CONDAENV_YML}
# https://github.com/molpro/iMolpro/issues/310
PATCH1=${BASEDIR}/Chooser.py.diff
PATCH2=${BASEDIR}/RecentMenu.py.diff
PATCH3=${BASEDIR}/iMolpro.py.diff# ------------------------------------------------------------------------
umask 0022
export LANG=C
export LC_ALL=Cmodule -s purge
cd ${WORKDIR}
# /tmp is not only for you!
export TMPDIR=${WORKDIR_TMP}
mkdir -p ${WORKDIR_TMP}rm -f ${MINIFORGE}
if [ -d ${WORKDIR}/miniforge3 ]; then
mv ${WORKDIR}/miniforge3 ${WORKDIR}/miniforge3-erase
rm -rf ${WORKDIR}/miniforge3-erase &
fi
wget ${MINIFORGE_URL}
sh ${MINIFORGE} -b -f -p ${WORKDIR}/miniforge3
eval "$(${WORKDIR}/miniforge3/bin/conda shell.bash hook)"if [ -d ${WORKNAME} ]; then
mv ${WORKNAME} ${WORKNAME}-erase
rm -rf ${WORKNAME}-erase &
fi
git clone ${IMOLPRO_GIT} -b ${VERSION} ${WORKNAME}
cd ${WORKNAME}patch -p0 < $PATCH
patch -p0 < $PATCH1
patch -p0 < $PATCH2
patch -p0 < $PATCH3
cp ${CONDAENV} ${CONDAENV_YML}
# create imolpro_build env
conda env create -f ${CONDAENV_YML}
conda activate imolpro_buildexport PYMOLPRO=${WORKDIR}/miniforge3/envs/imolpro_build/lib/python3.12/site-packages/pymolpro
sh ./build.sh
# install dist/iMolpro-***.tar.bz2 into $INSTALL_DIR manually
上記実行し、iMolpro-2025.2.0-dirty.Linux.x86_64.tar.bz2 を展開後、iMolpro/_internal/libstdc++.so.6 を手動で置き換え
# cp /gwork/users/${USER}/miniforge3/envs/imolpro_build/lib/libstdc++.so.6.0.34 iMolpro/_internal/libstdc++.so.6
メモ
- Chooser.py.diff と RecentMenu.py.diff は https://github.com/molpro/iMolpro/issues/310 対応のため
- iMolpro.py.diff はログインシェルが csh の時起動時のエラーを回避するため
- requirements.txt を使って環境を作ると(conda install --file=requirements.txt)エラーが発生するため、environment.yml で env を作成している(conda env create)。
- なお、requirements.txt を使わずに必要なパッケージを列挙してインストールする場合は成功する。--file で指定した場合とは依存解決の方法が異なっている?
- pymolpro/molpro_input.json が起動時に必要なようだったので、追加している。
- rpm や deb ではあまり都合が良くないため、初めから tar のみで作成。
- libstdc++.so.6 を強制的に置き換えない場合は GLIBCXX 関連のエラーが発生した。詳細については未検証。
- 環境依存の問題だとは思われる。
- miniforge 環境はビルド時のみ必須。実行時は不要。
- molpro コマンドが PATH で見つかれば連携可能。
- ただし、RCCS の Open OnDemand デスクトップ環境ではパーミッションの関係で連携不可。
- X11 転送でご利用ください。
- backend の設定を行っていないため、直接ジョブを投入することはできません。