Der Benutzer hat Anaconda Python in seinem Home-Verzeichnis Wenn installiert, Verfügbar im Conda-Paket sowie in Python Anwendungen, Bibliotheken usw. Es wird einfach zu bedienen sein.
In diesem Artikel wird beschrieben, wie Sie ein Conda-Paket in Anaconda Python erstellen Dies ist ein Dokument für Linux.
Bei Python-Paketen sind von PyPI (Python Package Index) verteilte Pakete bekannt. Diese können mit dem Befehl pip installiert werden.
** Installationsbeispiel mit Befehl pip **
$ pip install shpinx
PyPI-Pakete werden mit einem Verpackungstool namens setuptools erstellt. Weil es eine etwas eigenartige Methode zur Paketerstellung ist Es gibt einige Schwierigkeiten bei der Benutzerfreundlichkeit.
In Anaconda Python Sie können Pakete mit dem Befehl Conda hinzufügen / entfernen Es wird eine einfache Möglichkeit zum Erstellen eines Pakets bereitgestellt.
Das Conda-Paket wird von folgendem Speicherort heruntergeladen:
Wenn nur, um das Conda-Paket zu erstellen Sie können Miniconda verwenden.
** So installieren Sie Miniconda **
$ wget https://repo.continuum.io/miniconda/Miniconda3-4.3.14-Linux-x86_64.sh
$ bash Miniconda3-4.3.14-Linux-x86_64.sh -b -p $HOME/conda/x64
$ echo export PATH=$HOME/conda/x64/bin:$PATH >> $HOME/.bash_profile
$ source $HOME/.bash_profile
Als nächstes in der Root-Umgebung von Anaconda Python Installieren Sie das conda-build-Paket.
$ conda install -n root conda-build
Es wird empfohlen, die neueste Version von conda-build zu verwenden. Auch nach der Installation können Sie wie folgt aktualisieren.
$ conda upgrade -n root conda
$ conda upgrade -n root conda-build
Miniconda3, wenn Sie Miniconda3 unter $ HOME / conda / x64 installiert haben conda-build legt die Dateien in den folgenden Verzeichnissen ab:
$HOME/conda/x64/conda-bld/
├── git_cache --Quelle mit git heruntergeladen
├── hg_cache --Quelle mit mercurial heruntergeladen
├── linux-64 --Conda-Paket(x86_64:Systemabhängig)
├── linux-ppc64le --Conda-Paket(ppc64le:Systemabhängig)
├── noarch --Conda-Paket(noarch)
├── src_cache --Quelle mit Curl heruntergeladen
└── svn_cache --Quelle mit Subversion heruntergeladen
Das Paket ist nach dem Rezept aufgebaut (dazu später mehr), Wenn Sie das Paket installieren, wird es normalerweise in das folgende Verzeichnis extrahiert.
$HOME/conda/x64
├── bin
├── etc
├── lib
├── include
├── man
└── share
Wenn Sie es in ein Conda-Paket legen, Unter dem Home-Verzeichnis des Benutzers Sie können Pakete mit Benutzerrechten hinzufügen / entfernen.
Sie finden es unter CPAN, CRAN, luarocks.org, PyPI mit dem Befehl conda skeleton. Sie können ein vorhandenes Paket in ein Conda-Paket konvertieren.
Zum Beispiel Pyinstrument, das von PyPI vertrieben wird Führen Sie den Befehl wie folgt aus, um daraus ein Conda-Paket zu machen.
$ conda skeleton pypi autopep8
Using url https://pypi.python.org/packages/0a/fc/c541b2fa1b244e0484216076b95468dc011ae90016b8f37333a24a11e468/autopep8-1.3.2.tar.gz (105 KB) for autopep8.
Downloading autopep8
INFO:fetch.start:('autopep8-1.3.2', 107915)
INFO:fetch.update:16384
INFO:fetch.update:32768
INFO:fetch.update:49152
INFO:fetch.update:65536
INFO:fetch.update:81920
INFO:fetch.update:98304
INFO:fetch.update:107915
INFO:fetch.stop:None
Unpacking autopep8...
done
working in /tmp/tmptgwzsstsconda_skeleton_autopep8-1.3.2.tar.gz
The following NEW packages will be INSTALLED:
openssl: 1.0.2l-0
pip: 9.0.1-py35_1
python: 3.5.3-1
pyyaml: 3.12-py35_0 hpcs
readline: 6.2-2 local
setuptools: 27.2.0-py35_0
sqlite: 3.13.0-0
tk: 8.5.18-0
wheel: 0.29.0-py35_0
xz: 5.2.2-1
zlib: 1.2.8-3
Applying patch: '/tmp/tmptgwzsstsconda_skeleton_autopep8-1.3.2.tar.gz/pypi-distutils.patch'
patching file core.py
Hunk #1 succeeded at 167 with fuzz 2 (offset 1 line).
Writing recipe for autopep8
INFO:conda_build.config:--dirty flag not specified. Removing build folder after successful build/test.
Bei der Ausführung befindet es sich im aktuellen Verzeichnis Ein Verzeichnis mit dem Paketnamen sphinx wird erstellt Die erforderlichen Dateien werden erstellt.
$ $ ls autopep8/
bld.bat build.sh meta.yaml
Diese Dateien werden als Conda-Paketrezepte bezeichnet.
Wenn Sie dem Befehl conda build das Verzeichnis geben, in dem das Rezept gespeichert ist, Sie können ein Conda-Paket erstellen.
conda build autopep8
Dadurch wird eine Paketdatei erstellt (eigentlich ein Tarball).
/home/iisaka/conda/x64/conda-bld/linux-64/autopep8-1.3.2-py35_0.tar.bz2
Das Conda-Paket erstellt eine Paketdatei mit derselben Namenskonvention wie jetzt.
Paketnamen-Ausführung-Build-Typ_Build-Nummer.tar.bz2
Wenn Sie Miniconda3-4.3.14 installieren Die Standardversion von Python ist 3.6. Auf dieser Plattform Wenn Sie ein Conda-Paket für Python 2.7 erstellen möchten Bauen Sie wie folgt:
$ conda build --python=2.7 autopep8
Die als Ergebnis der Erstellung erstellte Datei lautet wie folgt
/home/iisaka//conda/x64/conda-bld/linux-64/autopep8-1.3.2-py27_0.tar.bz2
Kanalregistrierung
Zum Beispiel auf einem Linux-Computer mit der x86_64-Architektur Mit Conda unter / home / iisaka / py3 installiert Wenn Sie das Paket erstellen, wird es im folgenden Verzeichnis gespeichert.
Registrieren wir dies als Kanal.
$ conda config --add channels file:///home/iisaka/conda/x64/conda-bld
Das Rezept besteht aus den folgenden Dateien.
Paketmetadaten Paketname, Paketnummer, Build-Nummer, wie man die Quelle erhält usw. Die Datei ist im YAML-Format geschrieben und der Dateiname lautet meta.yaml.
#Kommentare vom scharfen Zeichen bis zum Ende der Zeile
package:
name:Paketnamen
version:Versionsnummer
source:
fn:Dateiname zum Speichern
url:URL zum Herunterladen der Quelle
#Der Prüfsummenwert kann entweder nur der eine oder der andere sein
md5:Überprüfen Sie den Summenwert von md5sum
sha1:Überprüfen Sie den Summenwert von sha1sum
sha256:Überprüfen Sie den Summenwert von sha256sum
# patches: #Liste der Patch-Dateien(Optional)
# - fix1.patch
# - fix2.patch
build:
number: 0 #Build-Nummer
requirements: #Beschreiben Sie den Namen des abhängigen Pakets
build: #Zum Zeitpunkt der Erstellung erforderliche Pakete
- python
- setuptools
run: #Zur Laufzeit erforderliche Pakete
- python
about: #Beschreiben Sie die Paketbeschreibung
home: #URL der Site oder des Projekts, die die Quelle verteilt
license: #Listenlizenz GPL2, GPL3, AGPL3, BSD,MIT etc.
summary: #Überblick
description:Erläuterung
license_family: BSD
Für Quelle statt URL Sie können auch einen relativen Pfad aus dem Rezeptverzeichnis mit Pfad angeben.
Das Format der jungfräulichen Nummer folgt PEP-440.
Wenn Sie die Anforderungen und die Build-Nummer für jede Plattform ändern möchten, Geben Sie den Selektor an und beschreiben Sie ihn wie folgt.
build:
number: 2 # [osx]
number: 1 # [linux]
requirements:
build:
- ncurses
- dbus # [osx]
- jpeg # [linux]
Der Selektor hat das Format `# [Wert]`
und der Wert kann wie folgt angegeben werden.
Auswahlwert | Inhalt |
---|---|
x86 | X86-Architektur mit Intel- und AMD-CPUs(32bit/64bit)Richtig bei |
x86_64 | X86 mit Intel oder AMD CPU_64 Architektur(64bit)Richtig bei |
linux | Richtig, wenn die Plattform Linux ist |
linux32 | Richtig, wenn die Plattform Linux ist und die Python-Architektur 32-Bit ist |
linux64 | True, wenn die Plattform Linux ist und die Python-Architektur 64-Bit ist |
armv6l | True, wenn die Plattform Linux und die Python-Architektur armv6l ist |
armv7l | Richtig, wenn die Plattform Linux und die Python-Architektur armv7l ist |
ppc64le | True, wenn die Plattform Linux ist und die Python-Architektur ppc64le ist |
osx | True, wenn die Plattform OS X ist |
unix | Plattform ist Unix(OS X oder Linux)Richtig bei |
win | True, wenn die Plattform Windows ist |
win32 | Richtig, wenn die Plattform Windows und die Python-Architektur 32-Bit ist |
win64 | True, wenn die Plattform Windows und die Python-Architektur 64-Bit ist |
py XX | Zwei-Buchstaben-Versionsnotation von Python(Beispiel 27)Gib CONDA_Entspricht dem Wert von PY) |
py3k | Richtig, wenn die Hauptversion von Python 3 ist |
py2k | True, wenn die Hauptversion von Python 2 ist |
py27 | Python Version 2.Richtig um 7 |
py34 | Python Version 3.Richtig, wenn 4 |
py35 | Python Version 3.Richtig bei 5 |
py36 | Python Version 3.Richtig um 6 |
np XX | Ganzzahlige Notation der NumPy-Version(Beispiel 111) CONDA_Entspricht dem Wert von NPY |
Was ist ein Build-Skript? Erforderlich, um ein Paket zu erstellen Ein Skript mit Anweisungen.
#!/bin/bash
$PYTHON setup.py install
# Add more build steps here, if they are necessary.
# See
# http://docs.continuum.io/conda/build.html
# for a list of environment variables that are set during the build process.
Entsprechend den in den Metadaten beschriebenen Quellenverfügbarkeitsinformationen Der Befehl conda build wird heruntergeladen Extrahieren Sie es in Ihr Arbeitsverzeichnis und rufen Sie das Build-Skript auf.
Das Arbeitsverzeichnis befindet sich unter $ HOME / conda / x64 / conda-build. Erstellt mit einem * Paketnamen-Epochenzeit * -Verzeichnisnamen.
Bei der Installation beim Erstellen eines Pakets Wechseln Sie unter dem Arbeitsverzeichnis zu dem Verzeichnis, das mit "b_env" beginnt Es wird in installiert.
/home/iisaka/conda/x64/conda-bld/lftp_1485460657191
├── _b_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_pl
│ ├── bin
│ ├── conda-meta
│ ├── include
│ ├── lib
│ ├── share
│ └── ssl
└── work
└── lftp-4.7.5
Wenn Sie vor und nach der Installation des Conda-Pakets verarbeiten möchten, Erstellen Sie das folgende Skript.
Diese Skripte werden ausgeführt, nachdem die folgenden Umgebungsvariablen festgelegt wurden.
Umgebungsvariable | Inhalt |
---|---|
PREFIX | (--Angegeben durch Präfix)Installationsverzeichnis |
PKG_VERSION | Paketversion |
PKG_BUILDNUM | Paket-Build-Nummer |
Bei der Vor- / Nachbearbeitung wird nichts an die Standardausgabe oder die Standardfehlerausgabe ausgegeben. Es wird in $ PREFIX / .messages.txt gespeichert.
Die folgenden Umgebungsvariablen werden intern in Conda festgelegt: Sie können im Build-Skript darauf verweisen.
Umgebungsvariable | Inhalt |
---|---|
ARCH | Entweder 32 oder 64. Die Standardeinstellung hängt von der Plattform ab, auf der conda ausgeführt wird. |
CMAKE_GENERATOR | CMake-Generatorzeichenfolge für die aktuelle Build-Umgebung. Auf Unix-Systemen ist dies immer der Fall"Unix Makefiles"ist. |
CONDA_BUILD=1 | 1 ist immer gesetzt. |
CPU_COUNT | Anzahl der CPUs(multiprocessing.cpu_count()Wert zurückgegeben von) |
SHLIB_EXT | Gemeinsame Bibliothekserweiterung |
DIRTY | zum Befehl conda build--Wenn das Dirty-Flag übergeben wird, wird es auf 1 gesetzt. Es kann verwendet werden, um Teile des Build-Skripts bedingt zu überspringen.(Keine Wiederholung erforderlich, um Zeit beim Herunterladen, Bereitstellen und Entwickeln von Rezepten zu sparen>Etwas wie) |
HTTP_PROXY | Erbt die in der Shell festgelegten Umgebungsvariablen. |
HTTPS_PROXY | Erbt die in der Shell festgelegten Umgebungsvariablen. |
LANG | Erbt die in Ihrer Shell festgelegten Umgebungsvariablen. |
MAKEFLAGS | Erbt die in Ihrer Shell festgelegten Umgebungsvariablen. Zum Bauen mit zwei CPUs-Zu ergänzende Argumente wie j2. |
NPY_VER | Numpy Version zu bauen(CONDA_NPY-Umgebungsvariablen und--Mit numpy einstellen) |
PATH | Erbt die in Ihrer Shell festgelegten Umgebungsvariablen.$PREFIX/bin wird hinzugefügt. |
PREFIX | (--Angegeben durch Präfix)Installationsverzeichnis) |
PKG_VERSION | Paketversion |
PYTHON | Der Pfad zur ausführbaren Python-Datei in der Build-Umgebung. |
R | Der Pfad zur ausführbaren R-Datei in der Build-Umgebung. R wird nur installiert, wenn es als Build-Anforderung aufgeführt ist) |
RECIPE_DIR | Rezeptverzeichnis |
SP_DIR | Python-Site-Pfad zu Paketen |
SRC_DIR | Quelle entfaltet sich(Oder klonen)Pfad, den die Quelldatei erkennen kann(.zip, .tar, .tar.gz, .tar.bz2, .tar.xz )Wenn nicht, ist dies der Pfad zu dem Verzeichnis, in das die Quelldateien kopiert wurden. |
STDLIB_DIR | Pfad zur Python-Standardbibliothek |
PKG_CONFIG_PATH | Pfad zum Verzeichnis pkgconfig |
LD_RUN_PATH | <build_prefix>/lib |
Wenn Sie ein Git-Repository mit "git_url" oder "path" als Quelle angeben, werden auch die folgenden Umgebungsvariablen festgelegt:
Umgebungsvariable | Inhalt |
---|---|
GIT_BUILD_STR | GIT_DESCRIBE_NUMMER und GIT_DESCRIBE_HASH unterstreichen(_)Zeichenketten verbunden durch. |
GIT_DESCRIBE_HASH | git describe --Aktueller Commit-Short-Hash-Wert, der von Tags angezeigt wird |
GIT_DESCRIBE_NUMBER | Eine Zeichenfolge, die die Anzahl der Commits aus dem letzten Tag angibt |
GIT_DESCRIBE_TAG | Eine Zeichenfolge, die das neueste Tag aus dem aktuellen Commit darstellt(git describe --Ausgabe von Tags) |
GIT_FULL_HASH | Eine Zeichenfolge, die den vollständigen SHA1-Wert des aktuellen HEAD angibt |
Wenn ein Quecksilber-Repository für die Quelle angegeben ist, Die folgenden Umgebungsvariablen werden ebenfalls festgelegt:
Umgebungsvariable | Inhalt |
---|---|
HG_BRANCH | Eine Zeichenfolge, die den aktuell aktiven Zweig angibt |
HG_BUILD_STR | HG_NUM_ID und HG_SHORT_ID unterstreichen(_)Zeichenkette verbunden durch |
HG_LATEST_TAG | Eine Zeichenfolge, die das neueste Tag aus dem aktuellen Commit angibt |
HG_LATEST_TAG_DISTANCE | Eine Zeichenfolge, die die Anzahl der Commits vom letzten Tag angibt |
HG_NUM_ID | Zeichenfolge, die die Versionsnummer angibt |
HG_SHORT_ID | Eine Zeichenfolge, die den Commit-Hash angibt |
Auf der Linux-Plattform in einer Umgebung, in der andere als die oben genannten Konda-Builds aufgerufen werden, Es werden keine Variablen geerbt. Durch Hinzufügen zu meta.yaml Sie können zu vererbende Umgebungsvariablen hinzufügen.
build:
script_env:
- TMPDIR
- LD_LIBRARY_PATH # [linux]
Wenn die geerbte Variable zur Erstellungszeit in der Shell-Umgebung fehlt Diese Variable bleibt nicht zugeordnet. Es wird eine Warnung angezeigt, die besagt, dass der Wert nicht eingestellt wurde.
Hinweis: Umgebungsvariablen erben Für andere kann es schwierig sein, die Binärdatei anhand des Rezepts aus der Quelle zu reproduzieren. Verwenden Sie diese Funktion mit Vorsicht oder vermeiden Sie sie überhaupt.
Umgebungsvariable | Inhalt |
---|---|
CONDA_PY | 27,Gib 34 oder 35. Die Version von Python zum Erstellen des Pakets. |
CONDA_NPY | 19,Gib 110 oder 111. Die Version von numpy, die beim Erstellen des Pakets verwendet wird. |
CONDA_PREFIX | /path/to/conda/Pfad zur Conda-Umgebung, die beim Erstellen eines Pakets wie env verwendet wird |
Auch wenn die Funktionen den gleichen Namen und die gleiche Version haben Mit diesem Mechanismus können Sie den Unterschied zwischen Paketen registrieren. Die von track_features angegebenen Pakete werden ebenfalls installiert.
Die Funktion ist nicht das Paket selbst Dies sind die Merkmale der Umgebung, in der das Paket installiert ist. Wenn beispielsweise mkl in track_features angegeben ist, Regelmäßige numpy entfernt und mkl vorgestellten numpy Paket installiert Dies liegt daran, dass sich die Conda automatisch entsprechend der angegebenen Funktion ändert, z.
Umgebungsvariable | Inhalt |
---|---|
FEATURE_NOMKL | Geben Sie beim Erstellen des Pakets die Funktion nomkl an. 0 für aus, 1 für ein |
FEATURE_DEBU | Geben Sie beim Erstellen von Paketen Debug-Funktionen an. 0 für aus, 1 für ein |
FEATURE_OPT | Geben Sie beim Erstellen des Pakets die Option opt an. 0 für aus, 1 für ein |
Wenn ich versuche, ein Paket zu erstellen, erhalte ich mehrere abhängige Pakete Möglicherweise müssen Sie es erstellen.
Stellen Sie den Namen des Rezeptverzeichnisses auf den in der Metadatei angegebenen Paketnamen ein.
Auf diese Weise, wenn Sie das Paket erstellen Das gleiche Verzeichnis wie das abhängige Paket Wenn im aktuellen Verzeichnis Dieses Paket wird automatisch für Sie erstellt.
Seit 2016 ist die Community-Version des PGI-Compilers kostenlos verfügbar Machen wir dies zu einem Conda-Paket.
Erstellen Sie zunächst das vom PGI-Compiler benötigte numactl-Paket.
Erstellen Sie dasselbe Verzeichnis wie den Paketnamen numactl Platzieren Sie dort die Metadatendatei und das Bulld-Skript.
$ mkdir numactl
** Metadatendatei **
package:
name: numactl
version: 2.0.11
source:
fn: numactl-2.0.11.tar.gz
url: https://github.com/numactl/numactl/archive/v2.0.11.tar.gz
md5: b56d2367217cde390b4d8087e00773b8
requirements:
build:
- m4
- autoconf
- automake
- libtool
- pkg-config
run:
about:
home: http://oss.sgi.com/projects/libnuma/
summary: NUMA support for Linux
license: GPL2.0
** Skript erstellen **
#!/bin/bash
export CFLAGS="${CFLAGS} -I${PREFIX}/include"
export CXXFLAGS="${CFLAGS}"
export CPPFLAGS="-I${PREFIX}/include"
export LDFLAGS="${LDFLAGS} -L${PREFIX}/lib"
bash autogen.sh
./configure --help
./configure \
--prefix="${PREFIX}" \
--enable-static
make -j${CPU_COUNT}
make install
Erstellen Sie das numactl-Paket
$ conda build numactl
Da die Notation von jinja2 in der Metadatei verwendet werden kann, Wird durch den Wert der Umgebungsvariablen zur Erstellungszeit wie folgt generiert Ich versuche Pakete zu wechseln.
Legen Sie Standardwerte für abhängige Pakete fest
{% set require1 = "" %}
{% set require2 = "" %}
{% set numactl = "" %}
#Enthält den Wert der Umgebungsvariablen HOME
{% set home = environ.get("HOME") %}
#Umgebungsvariable PGI_Enthält den Wert von COMPONENT
{% set component = environ.get("PGI_COMPONENT") %}
# PGI_Das Paketziel wird gemäß dem von COMPONENT angegebenen Wert geteilt.
{% if component == "openmpi" %}
{% set name = "pgi-openmpi" %}
{% set require1 = "- pgi-compiler" %}
{% elif component == "cuda80" %}
{% set name = "pgi-cuda80" %}
{% set require1 = "- pgi-compiler" %}
{% set require2 = "- pgi-java" %}
{% elif component == "cuda75" %}
{% set name = "pgi-cuda75" %}
{% set require1 = "- pgi-compiler" %}
{% set require2 = "- pgi-java" %}
{% elif component == "examples" %}
{% set name = "pgi-examples" %}
{% set require1 = "- pgi-compiler" %}
{% elif component == "java" %}
{% set name = "pgi-java" %}
{% else %}
{% set name = "pgi-compiler" %}
#Fordern Sie numactl-Pakete nur für Compiler an
{% set numactl = "- numactl" %}
{% endif %}
package:
name: {{ name }}
version: 17.4
source:
#TAR-Ball im Voraus von der ggA-Website heruntergeladen$Speichern Sie zu Hause
url: file://{{ home }}/pgilinux-2017-174-x86_64.tar.gz
patch:
- fix-install.patch
build:
number: 0
binary_relocation: false
requirements:
build:
- perl
{{ numactl }}
run:
{{ numactl }}
{{ require1 }}
{{ require2 }}
about:
home: http://www.pgroup.com/products/community.htm
license: PGI Eng-User License
license_file: LICENSE.txt
summary: "A no-cost license to a recent release of the PGI Fortran, C and C++ compilers and tools for multicore CPUs and NVIDIA Tesla GPUs, including all OpenACC, OpenMP and CUDA Fortran features."
Das Build-Skript sieht folgendermaßen aus:
#!/bin/bash
#Legen Sie die Parameter für das Installationsskript fest
export PGI_SILENT=true
export PGI_ACCEPT_EULA=accept
export PGI_INSTALL_DIR=${PREFIX}/pgi
export PGI_INSTALL_NVIDIA=false
export PGI_INSTALL_AMD=false
export PGI_INSTALL_JAVA=false
export PGI_INSTALL_MPI=false
export PGI_MPI_GPU_SUPPORT=false
export PGI_INSTALL_MANAGED=false
#Installationsverzeichnis erstellen
[ -d ${PREFIX}/pgi ] || mkdir ${PREFIX}/pgi
# post-link.sh / pre-unlink.Löschen Sie sh, wenn es sich im Rezeptverzeichnis befindet
[ -f ${RECIPE_DIR}/post-link.sh ] && rm -f ${RECIPE_DIR}/post-link.sh
[ -f ${RECIPE_DIR}/pre-unlink.sh ] && rm -f ${RECIPE_DIR}/pre-unlink.sh
Extrahieren Sie die Datei gemäß dem Paketnamen
case "${PKG_NAME}" in
*-cuda75)
tar -zxvf install_components/linux86-64.pgicuda.tar.gz \
-C ${PREFIX}/pgi
rm -rf ${PREFIX}/pgi/linux86-64/2017/cuda/8.0
exit 0
;;
*-cuda80)
tar -zxvf install_components/linux86-64.pgicuda8.0-libnvvp.tar.gz \
-C ${PREFIX}/pgi
tar -zxvf install_components/linux86-64.pgicuda.tar.gz \
-C ${PREFIX}/pgi
rm -rf ${PREFIX}/pgi/linux86-64/2017/cuda/7.5
exit 0
;;
*-compiler)
export PGI_INSTALL_MANAGED=true
export PGI_INSTALL_AMD=true
#Post nur für Compiler-link.sh / pre-unlink.aktiviere sh
[ -f ${RECIPE_DIR}/scripts/post-link.sh ] && \
cp ${RECIPE_DIR}/scripts/post-link.sh ${RECIPE_DIR}/post-link.sh
[ -f ${RECIPE_DIR}/scripts/pre-unlink.sh ] && \
cp ${RECIPE_DIR}/scripts/pre-unlink.sh ${RECIPE_DIR}/pre-unlink.sh
;;
*-openmpi)
export PGI_INSTALL_MPI=true
mkdir -vp workdir
tar -zxvf install_components/openmpi-1.10.2_2017_x86_64.tar.gz \
-C workdir
tar -zxvf workdir/linux86-64.openmpi-1.10.2.tar.gz \
-C ${PREFIX}/pgi/
tar -zxvf install_components/scalapack-2.0.2_2017_x86_64.tar.gz \
-C ${PREFIX}/pgi/
mkdir -vp ${PREFIX}/pgi/modulefiles
perl workdir/openmpi.pl \
-libdir ${PREFIX}/pgi/linux86-64/2017/mpi/openmpi-1.10.2 \
-openmpiver 1.10.2 \
-install ${PREFIX}/pgi/modulefiles/ \
-release 2017
exit 0
;;
*-java)
export PGI_INSTALL_JAVA=true
mkdir -vp ${PREFIX}/pgi/linux86-64/17.4/java
tar -zxvf install_components/common/jre-8u112-linux-x64.tar.gz \
-C ${PREFIX}/pgi/linux86-64/17.4/java
mkdir -vp ${PREFIX}/pgi/linux86-64/17.4/bin
cp install_components/linux86-64/17.4/bin/*.jar \
${PREFIX}/pgi/linux86-64/17.4/bin
cp install_components/linux86-64/17.4/bin/pgtjavarc \
${PREFIX}/pgi/linux86-64/17.4/bin
exit 0
;;
*-example)
tar -zxvf install_components/linux86-64.examples.tar.gz \
-C ${PREFIX}/pgi
exit 0
;;
esac
./install
#Löschen Sie nicht benötigte Dateien
rm -rf ${PREFIX}/pgi/linux86-64/17.4/cray
rm -rf ${PREFIX}/pgi/linux86-64/2017/cray
rm -rf ${PREFIX}/pgi/linux86-64/2017/examples/
[ "${PGI_INSTALL_MPI}" != "true" ] && \
rm -rf ${PREFIX}/pgi/linux86-64/17.4/lib/scalapack
[ "${PGI_INSTALL_MPI}" != "true" ] && {
rm -rf ${PREFIX}/pgi/linux86-5/17.4/bin/*.jar
rm -rf ${PREFIX}/pgi/linux86-5/17.4/bin/pgtjavarc
}
Mit scripts / post-link.sh
im Rezeptverzeichnis
Erstellen Sie scripts / pre-unlink.sh
.
scripts/post-link.sh
#!/bin/bash
mkdir -p ${PREFIX}/etc/conda/deactivate.d
mkdir -p ${PREFIX}/etc/conda/activate.d
cat <<EOF > ${PREFIX}/etc/conda/deactivate.d/${PKG_NAME}.sh
export PATH=\${PATH_pgi}
export MANPATH=\${MANPATH_pgi}
export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH_pgi}
unset PATH_pgi
unset MANPATH_pgi
unset LD_LIBRARY_PATH_pgi
EOF
cat <<EOF > ${PREFIX}/etc/conda/activate.d/${PKG_NAME}.sh
export PGI=${PREFIX}/pgi/linux86-64/${PKG_VERSION}
export CC=\${PGI}/bin/pgcc
export FC=\${PGI}/bin/pgfortran
export F90=\${PGI}/bin/pgf90
export F77=\${PGI}/bin/pgf77
export CPP="\${PGI}/bin/pgcc -E"
export CXX=\${PGI}/bin/pgc++
#
export PATH_pgi=\${PATH}
export PATH=\${PGI}/bin:\${PATH}
#
export MANPATH_pgi=\${MANPATH}
export MANPATH=\${PGI}/man:\${MANPATH}
#
export LD_LIBRARY_PATH_pgi=\${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH=\${PGI}/lib:\${LD_LIBRARY_PATH}
EOF
scripts/pre-unlink.sh
#!/bin/sh
rm -f ${PREFIX}/etc/conda/deactivate.d/${PKG_NAME}.sh
rm -f ${PREFIX}/etc/conda/activate.d/${PKG_NAME}.sh
In der Metadatendatei angegebene Patch-Datei
fix-install.patch
diff -Nru pgilinux-2017-174-x86_64.orig/install_components/install pgilinux-2017-174-x86_64/install_components/install
--- pgilinux-2017-174-x86_64.orig/install_components/install 2017-04-22 02:16:31.000000000 +0900
+++ pgilinux-2017-174-x86_64/install_components/install 2017-06-01 14:30:18.902018374 +0900
@@ -739,27 +739,7 @@
cd ..
rm -rf scalapack
- numa_lib=""
- if test -e /usr/lib64/libnuma.so ; then
- numa_lib=/usr/lib64/libnuma.so
- elif test -e /usr/lib64/libnuma.so.1 ; then
- numa_lib=/usr/lib64/libnuma.so.1
- elif test -e /lib64/libnuma.so ; then
- numa_lib=/lib64/libnuma.so
- elif test -e /lib64/libnuma.so.1 ; then
- numa_lib=/lib64/libnuma.so.1
- elif test -e /usr/lib/x86_64-linux-gnu/libnuma.so ; then
- numa_lib=/usr/lib/x86_64-linux-gnu/libnuma.so
- elif test -e /usr/lib/x86_64-linux-gnu/libnuma.so.1 ; then
- numa_lib=/usr/lib/x86_64-linux-gnu/libnuma.so.1
- fi
- if test "numa_lib" != "" ; then
- ln -sf $numa_lib $INSTALL_DIR/linux86-64/$REL_VERSION/mpi/openmpi-${OMPI_VERSION}/lib/libnuma.so
- else
- echo "WARNING: libnuma.so was not found on your system!"
- echo "Open MPI requires libnuma.so to function correctly."
- echo "Please install libnuma.so from your Linux distribution onto this system."
- fi
+ numa_lib="${PREFIX}/lib/libnuma.so"
if test "$ans" != "y" -a "$ans" != "yes" ; then
mpi_wrapper="$INSTALL_DIR/linux86-64/$REL_VERSION/mpi/openmpi-${OMPI_VERSION}/bin/env.sh"
Recommended Posts