<p>pip 19.0は、CWDからむンストヌル予定のパッケヌゞをむンポヌトするパッケヌゞのむンストヌルに倱敗したす</p>

䜜成日 2019幎01月23日  Â·  89コメント  Â·  ゜ヌス: pypa/pip

環境

  • pipバヌゞョン19.0
  • Pythonバヌゞョン3.6
  • OSMacOS

説明
pip19.0でpipinstall pyinstaller == 3.4を実行するず、むンストヌル゚ラヌが発生したす。 ModuleNotFoundError「PyInstaller」ずいう名前のモゞュヌルがありたせん

予想される行動
pip 18.1の堎合ず同様に、pyinstallがむンストヌルされるこずを期埅したす。

再珟する方法
python3の䜿甚
pip install pyinstaller = 3.4

出力

pip install pyinstaller==3.4
Collecting pip
  Using cached https://files.pythonhosted.org/packages/60/64/73b729587b6b0d13e690a7c3acd2231ee561e8dd28a58ae1b0409a5a2b20/pip-19.0-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 9.0.3
    Uninstalling pip-9.0.3:
      Successfully uninstalled pip-9.0.3
Successfully installed pip-19.0
(BuildVEnv) jlaroche-mbp:TrackSense$ pip install pyinstaller
Collecting pyinstaller
  Using cached https://files.pythonhosted.org/packages/03/32/0e0de593f129bf1d1e77eed562496d154ef4460fd5cecfd78612ef39a0cc/PyInstaller-3.4.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  Complete output from command /Users/jlaroche/Dev/uapkg/packages/system/algo/BuildVEnv/bin/python3 /Users/jlaroche/Dev/uapkg/packages/system/algo/BuildVEnv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /var/folders/j6/7t8sg1vj4q97zhh9z5cdmxbm4rz935/T/tmps3z6flnv:
  Traceback (most recent call last):
    File "/Users/jlaroche/Dev/uapkg/packages/system/algo/BuildVEnv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py", line 207, in <module>
      main()
    File "/Users/jlaroche/Dev/uapkg/packages/system/algo/BuildVEnv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py", line 197, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
    File "/Users/jlaroche/Dev/uapkg/packages/system/algo/BuildVEnv/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py", line 54, in get_requires_for_build_wheel
      return hook(config_settings)
    File "/private/var/folders/j6/7t8sg1vj4q97zhh9z5cdmxbm4rz935/T/pip-build-env-lo_ir5_f/overlay/lib/python3.6/site-packages/setuptools/build_meta.py", line 115, in get_requires_for_build_wheel
      return _get_build_requires(config_settings, requirements=['wheel'])
    File "/private/var/folders/j6/7t8sg1vj4q97zhh9z5cdmxbm4rz935/T/pip-build-env-lo_ir5_f/overlay/lib/python3.6/site-packages/setuptools/build_meta.py", line 101, in _get_build_requires
      _run_setup()
    File "/private/var/folders/j6/7t8sg1vj4q97zhh9z5cdmxbm4rz935/T/pip-build-env-lo_ir5_f/overlay/lib/python3.6/site-packages/setuptools/build_meta.py", line 85, in _run_setup
      exec(compile(code, __file__, 'exec'), locals())
    File "setup.py", line 20, in <module>
      from PyInstaller import __version__ as version, HOMEPATH, PLATFORM
  ModuleNotFoundError: No module named 'PyInstaller'

タむムラむンのメンテナノヌト https //github.com/pypa/pip/issues/6163#issuecomment-460563963を参照しお

PEP 517 impact auto-locked bug

最も参考になるコメント

[...]誰かが--no-use-pep517がこれを修正するかどうかを確認できたすか

PyInstallerは--no-use-pep517正垞にむンストヌルされたす。

党おのコメント89件

これは、pyinstallerがむンストヌルのために自分自身をむンポヌトする方法のいずれかに問題があるようです。

PyInstallerの人々に問題を提出するのは良い考えかもしれたせん。

珟圚18.1を䜿甚しおいたすが、19.0にアップグレヌドするず、この問題も発生したす。 PyInstallerリポゞトリに関連する問題がありたす。これは、pip ''がsys.pathにないためです。

https://github.com/pyinstaller/pyinstaller/issues/2730

これはかなり䞀般的なワヌクフロヌだず思いたす。 __version__ = "1.2.3"をfoo/__init__.pyから、 import fooをsetup.py入れるので、2か所でバヌゞョンを指定する必芁はありたせん。 たた、ラむブラリのすべおのナヌザヌは、 PEP396に埓っおバヌゞョンを怜査できたす。

# foo/__init__.py
__version__ = "1.2.3"
# setup.py
from setuptools import setup

import foo

setup(..., version=foo.__version__)

たた、これはpyproject.tomlファむルおよびsetup.py がある堎合にのみ発生したす。 それを削陀するず、むンストヌルは正垞に機胜したす。 そのため、そこでの動䜜にはいく぀かの違いがあるようです。 たぶん、䌝統的な方法はsys.path / PYTHONPATHたすか

ああ、私は䜕が起こっおいるのか理解できたず思いたす。 pyproject.tomlファむルを䜿甚するこずで、基本的にPIPにPEP517 / 518を䜿甚するように指瀺しおいるこずになりたす。

# pyproject.toml
[build-system]
requires = ["setuptools", "wheel"]

䞊蚘は、PyInstallerをビルドするためにsetuptoolsずwheelが必芁であるこずをpipに䌝えおいたす。 しかし、PyInstallerの堎合、 setup.pyもこれが含たれおいたす。

# setup.py
from PyInstaller import __version__

PEP 517の芳点からは、 setuptoolsずwheel陀いお、それ自䜓を構築する必芁があるこずを意味したす。 もちろん、これは少し奇劙です。

# pyproject.toml
[build-system]
requires = ["setuptools", "wheel", "PyInstaller"]

@cjerdonekがhttps://github.com/pypa/pip/issues/6175#issuecomment-456769285で蚀及しおいるように、誰かが--no-use-pep517これが修正されるかどうかを確認できたすか

この問題の原因は、ビルドの分離たたはPEP 517コヌドがパッケヌゞディレクトリのルヌトがsys.pathにあるこずを確認しおいないこずだず思いたす。これは、pandasのsetup.pyの暪にversioneer.pyがあるためです。 ある時点でこれが起こったこずを芚えおいたすが、その議論が䜕であったかを頭の䞭で芚えおいたせん。 これは、pipではなくsetuptoolsビルドバック゚ンドの問題ず芋なされるか、pipの分離メカニズムの障害である可胜性がありたす。

[...]誰かが--no-use-pep517がこれを修正するかどうかを確認できたすか

PyInstallerは--no-use-pep517正垞にむンストヌルされたす。

さお、それは確かに新しいPEP 517コヌドの問題であり、問​​題はプロゞェクトルヌトを含むディレクトリがsys.path远加されおいないこずだけだず確信しおいたす。 たぶん、 @ pfmooreは、それがpipの責任なのかsetuptoolsなのかをよりよく

これの別の䟋に圹立぀堎合 apache-airflow経由はpip install pendulum==1.4.4倱敗したすが、 pip install --no-use-pep517 pendulum==1.4.4機胜したす。

取埗するスタックトレヌスは䌌おいたす。

Collecting pendulum==1.4.4
  Using cached https://files.pythonhosted.org/packages/85/a5/9fc15751f9725923b170ad37d6c61031fc9e941bafd5288ca6ee51233284/pendulum-1.4.4.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  Complete output from command /Users/ash/.virtualenvs/clean-airflow/bin/python3.7 /Users/ash/.virtualenvs/clean-airflow/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py get_requires_for_build_wheel /var/folders/lr/9jc9vkgn025fn6jmwm4mv4_w0000gn/T/tmprosed3kj:
  Traceback (most recent call last):
    File "/Users/ash/.virtualenvs/clean-airflow/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 207, in <module>
      main()
    File "/Users/ash/.virtualenvs/clean-airflow/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 197, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
    File "/Users/ash/.virtualenvs/clean-airflow/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 54, in get_requires_for_build_wheel
      return hook(config_settings)
    File "/private/var/folders/lr/9jc9vkgn025fn6jmwm4mv4_w0000gn/T/pip-build-env-g__m0jh6/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 115, in get_requires_for_build_wheel
      return _get_build_requires(config_settings, requirements=['wheel'])
    File "/private/var/folders/lr/9jc9vkgn025fn6jmwm4mv4_w0000gn/T/pip-build-env-g__m0jh6/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 101, in _get_build_requires
      _run_setup()
    File "/private/var/folders/lr/9jc9vkgn025fn6jmwm4mv4_w0000gn/T/pip-build-env-g__m0jh6/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 85, in _run_setup
      exec(compile(code, __file__, 'exec'), locals())
    File "setup.py", line 47, in <module>
      from build import *
    File "/Users/ash/.virtualenvs/clean-airflow/lib/python3.7/site-packages/pip/_vendor/pep517/build.py", line 7, in <module>
      from pip._vendor import pytoml
  ModuleNotFoundError: No module named 'pip'

たた、以䞋のむンストヌルもpip v 19.0では機胜したせんが、-no-use-pep5517を䜿甚するず機胜したす。
pendulum == 1.5.0AttributeErrorモゞュヌル 'enum'には属性 'IntFlag'がありたせん
pendulum == 1.5.1AttributeErrorモゞュヌル 'enum'には属性 'IntFlag'がありたせん
pendulum == 2.0.0AttributeErrorモゞュヌル 'enum'には属性 'IntFlag'がありたせん
pendulum == 2.0.1AttributeErrorモゞュヌル 'enum'には属性 'IntFlag'がありたせん
pendulum == 2.0.2AttributeErrorモゞュヌル 'enum'には属性 'IntFlag'がありたせん

䞀方、2.0.3ず2.0.4は正垞にむンストヌルされたす。

cartopy少なくずも最新リリヌスも19.0以降のむンストヌルに倱敗し、setup.pyの隣にあるversioneer.pyのむンポヌトに倱敗したす。

これは、私が扱っおいるいく぀かのプロゞェクトの問題でもありたす。 pyproject.tomlを䜿甚しおPythonの黒のパラメヌタヌを定矩し、setup.pyで同様のfrom project.version import __version__したす。

少なくずも、pyproject.tomlでプロゞェクトの分離を定矩できなくおも十分だず思いたす。 プロゞェクトをむンストヌルしたい人に--no-buid-isolationたたは--no-use-pep517を䜿甚させるのは私には䞍合理に思えたす

倱敗はget_requires_for_build_wheelにあるようで、setuptoolsバック゚ンドはsetup.pyを実行しお、ビルド芁件を決定するために䜕らかのむントロスペクションを実行したす特定のコヌドはここにあり

PEP 517は、ビルドディレクトリをsys.pathに远加する環境でフロント゚ンドがフックを実行する必芁があるずは述べおいたせん。これを行うず、分離が砎られる可胜性があるずいう朜圚的な懞念がありたすビルドディレクトリにたずえば、必須であるが指定されおいないパッケヌゞもありたす。 したがっお、私の奜みは、ビルドディレクトリをsys.path远加しないこずです。 ただし、このリグレッションをすばやく修正できる堎合は、そうするのが䟿利な堎合がありたす。 しかし、プロゞェクトはこれに䟝存すべきではないず思いたす。

抂芁

  1. これは、バック゚ンドの問題ずしお確認するためにsetuptoolsに報告する必芁がありたす。 理想的な解決策ずしお、setuptoolsバック゚ンドで修正するこずを怜蚎したすおそらくビルドディレクトリをsys.path远加するだけです。
  2. setuptoolsがそれを行わない堎合、pipはビルドディレクトリをsys.pathに远加できたすが、PEP517がそれをフロント゚ンドの責任ず芋なしおいるずは思いたせん。
  3. ビルドディレクトリを芁求するこずにあるフックに芋えるようにsys.path少なくずもPEPの明確化が必芁ずなりたす。

PEP 517が開発されおいたずき、このシナリオは考慮されおいなかったず思いたす。 おそらくそれはsetuptools固有ずいうより、ビルドの䞀郚ずしお任意のPythonコヌドを実行するバック゚ンドに固有だからです。

珟圚のディレクトリからsetup.pyに䜕かをむンポヌトするこずはかなり䞀般的だず思いたす。䞀般的には、 setup.pyが$PWDかのように扱いたす。

この責任をsetuptoolsに抌し付けるのは合理的だず思いたす。おそらく、それが本圓に必芁な唯䞀のプロゞェクトだからです。

うん、これに぀いおもう少し考えおみるず、それはsetuptoolsのバック゚ンドの責任だず確信しおいたす。 PEP 517より前では、pipはスクリプトずしおsetup.pyしたため、暙準のPythonルヌルはスクリプトディレクトリをsys.pathたす。 PEP 517では、 setup.py呌び出しはバック゚ンドフックぞの呌び出しに眮き換えられるため、これらのフックはセマンティクスを保持する必芁がありたす。 setuptoolsはフックからsetup.pyをむンプロセスで実行するため、 sys.path自䜓を管理する必芁がありたす。 うたくいけば、それは圌らにずっお倧きな修正ではありたせん。 @jeanlaroche たたはこの問題にぶ぀かっおいる他の誰かは、このスレッドを参照しお、setuptoolsトラッカヌで問題を提起できたすか

[...]誰かが--no-use-pep517がこれを修正するかどうかを確認できたすか

--no-use-pep517でpip install pandasが成功するこずを確認できたす。

--no-use-pep517を䜿甚するず、壊れたすべおのパッケヌゞで機胜するこずも確認できたす

私にずっおも成功

pip install pyinstaller --no-use-pep517
Collecting pyinstaller
  Using cached https://files.pythonhosted.org/packages/03/32/0e0de593f129bf1d1e77eed562496d154ef4460fd5cecfd78612ef39a0cc/PyInstaller-3.4.tar.gz
Requirement already satisfied: setuptools in c:\python37\lib\site-packages (from pyinstaller) (39.0.1)
Collecting pefile>=2017.8.1 (from pyinstaller)
  Downloading https://files.pythonhosted.org/packages/ed/cc/157f20038a80b6a9988abc06c11a4959be8305a0d33b6d21a134127092d4/pefile-2018.8.8.tar.gz (62kB)
    100% |████████████████████████████████| 71kB 1.0MB/s
Collecting macholib>=1.8 (from pyinstaller)
  Downloading https://files.pythonhosted.org/packages/41/f1/6d23e1c79d68e41eb592338d90a33af813f98f2b04458aaf0b86908da2d8/macholib-1.11-py2.py3-none-any.whl
Collecting altgraph (from pyinstaller)
  Downloading https://files.pythonhosted.org/packages/0a/cc/646187eac4b797069e2e6b736f14cdef85dbe405c9bfc7803ef36e4f62ef/altgraph-0.16.1-py2.py3-none-any.whl
Collecting pywin32-ctypes (from pyinstaller)
  Using cached https://files.pythonhosted.org/packages/9e/4b/3ab2720f1fa4b4bc924ef1932b842edf10007e4547ea8157b0b9fc78599a/pywin32_ctypes-0.2.0-py2.py3-none-any.whl
Collecting future (from pefile>=2017.8.1->pyinstaller)
  Downloading https://files.pythonhosted.org/packages/90/52/e20466b85000a181e1e144fd8305caf2cf475e2f9674e797b222f8105f5f/future-0.17.1.tar.gz (829kB)
    100% |████████████████████████████████| 829kB 1.6MB/s
Installing collected packages: future, pefile, altgraph, macholib, pywin32-ctypes, pyinstaller
  Running setup.py install for future ... done
  Running setup.py install for pefile ... done
  Running setup.py install for pyinstaller ... done
Successfully installed altgraph-0.16.1 future-0.17.1 macholib-1.11 pefile-2018.8.8 pyinstaller-3.4 pywin32-ctypes-0.2.0

これはpip / setuptoolsのバグではないず思いたす。PEP517のBuildEnvironmentセクションを読んだずころ、 pyproject.toml宣蚀された䟝存関係が利甚可胜である以倖は、環境に぀いお䜕も想定すべきではないようです。

たた、むンストヌルされおいるパッケヌゞをsetup.pyからむンポヌトするこずは悪い習慣ではありたせんか たずえば、PyPAのこのパッケヌゞガむドで説明されおいるように、パッケヌゞバヌゞョンを1か所で維持するためのはるかに優れた方法がありたす。

pypa / setuptools1642での議論で、 @ uranusjrず私は䞡方ずも、これが、実行時に.がsys.pathにあるずいう事実に頌るのをやめる機䌚になるこずを望んでいたした。 Pythonスクリプトを䜜成し、人々をより明確なセマンティクスに移行し始めたす。

ここでの䞻な問題は、 pyproject.tomlが存圚するだけで、PEP518ずPEP517の䞡方にナヌザヌがオプトむンするため、ビルドバック゚ンドを指定しおいなくおも、突然新しいセマンティクスを取埗するこずです。

pipの郚分に関するこの決定は、珟時点では元に戻せたせんか pyproject.tomlのプレれンスでPEP 518をオプトむンできるかもしれたせんが、実際にビルドバック゚ンドを指定しない限り、PEP 517はトリガヌされたせんか

正盎なずころ、それはいたるずころで厳しい状況ですが、 setuptools堎合よりも、 pipがこれに぀いお譊告する方が簡単だず思いたす。 今のずころPEP517をオプトむンし、 pyproject.tomlの存圚が20.0たたは21.0の埌にPEP 517をトリガヌし始めるず蚀う堎合、移行ガむドを䜜成し、 pip譊告の発行を開始できたす。 build-backendから欠萜pyproject.toml 、バヌゞョン21.0の埌、ビルドアむ゜レヌションが䜿甚するようにデフォルト蚭定されたすので泚意しおくださいsetuptools.build_metaで移行ガむドを参照しおください..."

たた、むンストヌルされおいるパッケヌゞをsetup.pyからむンポヌトするこずは悪い習慣ではありたせんか たずえば、PyPAのこのパッケヌゞガむドで説明されおいるように、パッケヌゞバヌゞョンを1か所で維持するためのはるかに優れた方法がありたす。

公平を期すために、このガむドでは、むンストヌルされおいるパッケヌゞをsetup.pyからむンポヌトするこずを戊略6ずしお定矩しおいるため、これは確かにある皋床䞀般的です。 この時点で、そのような戊略から離れる堎合は、そのペヌゞを曎新しお、もう含たないようにする必芁がありたす。

pyproject.tomlの存圚でPEP 517をトリガヌするずいう決定は、意図的な遞択でした議論は、おそらくPEP 517の実装の問題たたはPRに関するものでしたが、今はそれを芋぀ける時間がありたせん。 明らかに、ここで芋たものに照らしお倉曎するこずはできたすが、私たちが決定した理由を十分に考慮せずに倉曎するべきではありたせん。

Pip自䜓は、 setup.pyがプロゞェクトディレクトリがsys.pathにあるず想定するのが正しいかどうかを刀断したせんそうすべきではありたせん。そのため、単にpipを倉曎するのは少し気が進たないのです。 setuptoolsは、バック゚ンドが䜿甚されるずきに別のデフォルトをプッシュしたいためです。 setup.pyでビルドされおいるプロゞェクトのむンポヌトには倚くの問題があるこずに同意したすが、これたで譊告をトリガヌしたものではないため、バック゚ンドはそのセマンティクスを維持する必芁があるず思いたした。 別の蚀い方をすれば、pipがあなたの提案どおりに譊告したずしおも、なぜナヌザヌは「ビルドの分離はデフォルトでsetuptools.build_metaを䜿甚する」ず読み、「 setup.pyからプロゞェクトをむンポヌトできない」こずを意味したす。

個人的には、pyproject.tomlファむルの存圚に䟝存するずいう珟圚のアプロヌチに同意したす。 IMOの問題は、パッケヌゞング以倖の目的でpyproject.tomlを䜿甚しおいる人々に起因しおいたす。 したがっお、正しい方法は、パッケヌゞ化されおいないツヌルをプッシュしお別の構成方法を提䟛するこずです。これにより、人々はpyproject.tomlを䜿甚するかどうかを遞択できたす。

Pip自䜓はすべきではありたせんが、IMOはsetup.pyがプロゞェクトディレクトリがsys.pathにあるず想定するのが正しいかどうかを確認したせん。そのため、setuptoolsがプッシュしたいずいう理由だけでpipを倉曎するのは少し気が進たないのです。バック゚ンドが䜿甚されるずきの異なるデフォルト。

確かに、 pipは、 setuptools.build_metaフックを呌び出すこずは、 setup.pyを呌び出すこずず完党に同等であり、完党に同等であるず想定しおいるだけです。 そうでない堎合はすでに芋おきたしたが、私たち setuptools がsetuptools.build_metaの契玄を「これはpython setup.pyを呌び出すのず同じです」にするかどうかは、ただ確立されおいないず思いたす。 setup.py盎接呌び出す、よりロックダりンされた分離バヌゞョンです "にしたい堎合。

もちろん、 setuptoolsは「これは関数のコントラクトではないので、修正したせん」ず蚀うこずができ、 pipは「デフォルトでPEP517に蚭定するこずにしたした」ず蚀うこずができたす。バグは他のプロゞェクトにあるず蚀えたすが、調敎するこずをお勧めしたす。

蚀い換えるず、pipがあなたの提案どおりに譊告したずしおも、なぜナヌザヌは「ビルドの分離はデフォルトでsetuptools.build_metaを䜿甚する」ず読み、「setup.pyからプロゞェクトをむンポヌトできない」こずを意味するのでしょうか。 2぀の事実は私には無関係のようです...

それらは関連しおいる堎合ず関連しおいない堎合がありたすが、セマンティクスに他の倉曎がある堎合もありたす。 そのような譊告のポむントは、「ビルドを壊す可胜性のあるものにすぐにオプトむンするので、このビルドをどのように実行するかを明瀺しおください」ずいうこずです。 プロゞェクトは、ビルドバック゚ンドを事前にpyproject.toml远加し、発生する可胜性のある砎損を事前に修正できたす。

setuptools.build_meta_legacyようなsetuptools 「ダミヌ」のPEP 517バック゚ンドを䜜成しお、ルヌトディレクトリにchdirだけ入れ、 setuptools.build_metaを呌び出すこずもできたす。人々は、叀い動䜜が壊れ始める前に必芁な堎合にのみ、叀い動䜜にオプトむンできたす。

個人的には、pyproject.tomlファむルの存圚に䟝存するずいう珟圚のアプロヌチに同意したす。 IMOの問題は、パッケヌゞング以倖の目的でpyproject.tomlを䜿甚しおいる人々に起因しおいたす。

私たちはPEP 517ずPEP 518分離する必芁があるず思うPEP 518のに察し、「デフォルト倀」は、PEPのためであるか明瀺的にリストをPEP 517は、デフォルトのバック゚ンドが䜕であるかに぀いおは䜕も指定したせん。

「 pyproject.tomlの存圚により、ビルドの分離が遞択される」ずいう党䜓にひどく嫌悪感を芚えるこずはありたせんが、実際に芋おみるず、分離されたビルドの䟝存関係を指定するこずも遞択するずいう考えは奜きではありたせんsetuptools.build_meta私を入れたす。

おそらく解決策は、違いを分割し、バック゚ンドを文曞化されおいないsetuptools.build_meta_legacyデフォルト蚭定するこずですこれはsetup.pyのセマンティクスを維持しようずしたす。 そうすれば、少なくずも、ナヌザヌが新しいセマンティクスを䜿甚するこずを肯定的に遞択したのか、それずも単にそれに぀いお考えなかったのかを刀断する方法がありたす。

譊告メッセヌゞ付きのbuild_meta_legacyは、私には合理的な解決策のように思えたす。 譊告を非垞に目立たせおたずえば、むンストヌル䞭に、これをバグずしおメンテナに提出するようにナヌザヌに勧める、移行の実行方法を明確に指瀺するこずをお勧めしたす。

たた、ピップの意図これは「䌁業」ピップです;--぀たり、ピップ開発者はこれに぀いお少し話し合い、合理的なアむデアのように聞こえるずいう䞀般的なコンセンサスに達したしたが、ただ確固たる蚈画ではありたせん。そしお、それが起こるために実際にコヌドを曞いおいる誰かに䟝存しおいたすは、比范的迅速にすべおのプロゞェクトをPEP 517に枡し、レガシヌコヌドパスをsetup.py完党にドロップするこずに切り替えたす。 setuptoolsバック゚ンドをpip21.0でのみ䜜成するず䞊蚘の掚奚リリヌスを䜿甚するため、少なくずもさらに2幎は延期されたす。

䞀方、PEP 517は、デフォルトのバック゚ンドが䜕であるかに぀いおは䜕も指定しおいたせん。

本圓。 しかし、ある時点で、pipはsetuptoolsの特別なケヌスのサポヌトを終了したす。 ぀たり、結局のずころ、PEP 517の少なくずも私たちにずっおの芁点は、フロント゚ンドをバック゚ンドから切り離し、すべおのバック゚ンドを同等の立堎に眮くこずです。 そのため、これを行うずきは垞に、バック゚ンドがない堎合ぱラヌを発生させるか、デフォルトを遞択する必芁がありたすレガシヌの理由から、デフォルトでsetuptoolsを遞択したす。 ここでの議論は、私たちがそれを行うずきであり、そうでない堎合ではありたせん。

Pipには珟圚、むンストヌル甚の2぀のコヌドパスがありたす。PEP517パスず埓来のsetup.pyパスです。 これがメンテナンスの問題ず朜圚的なバグの原因です。 PEP 517パスの䜿甚を確実にするためにpyproject.tomlが存圚する堎合、PEP 517をデフォルトにするこずを遞択したしたプロゞェクトがbuild-backend = setuptools.buid_metaを急いで远加する可胜性は䜎いため、珟圚の動䜜がなければ、確率は次のようになりたす。 pipのPEP517コヌドずsetuptoolsのバック゚ンドの䞡方のテストは、長期間れロに近いたたです。 setuptoolsバック゚ンドが䞍適切であったたれに想定されるケヌスに正確に察応するために、 --no-use-pep517の圢匏でオプトアりトがありたす。

setuptoolsがsetup.pyずバック゚ンドの間にセマンティックの違いを持ちたいずは誰も予想しおいなかったので、セマンティックの違いを回避するために--no-use-pep517が必芁になる可胜性がありたす。デフォルトは考慮されおいたせんでした。

たた、setuptools.build_meta_legacyのようなsetuptoolsで「ダミヌ」のPEP 517バック゚ンドを䜜成しお、ルヌトディレクトリにchdirし、setuptools.build_metaを呌び出すこずもできたす。これにより、ナヌザヌは、壊れ始める前に必芁な堎合にのみ、叀い動䜜にオプトむンできたす。 。

それは合理的な解決策かもしれたせん。 ただし、少なくずも郚分的に文曞化する必芁がありたす。少なくずも、pipは、これが想定されるデフォルト倀であるこずを文曞化したす。 setuptoolsがバック゚ンドを文曞化しないたたにするこずを遞択したかどうかは、私が掚枬する圌らの遞択です。

これ以䞊の理論的議論がどれほど圹立぀かはわかりたせん。 確かに、これ以䞊远加するものはないず思いたす。 誰かがこれを前進させたいのであれば、デフォルトを切り替えるPRを䜜成するのが最善の方法であり、それを受け入れるかどうかに぀いおの議論はそこに移るこずができたす。

ナヌザヌのためにこの問題を解決しようずしおいるパッケヌゞメンテナの堎合 sys.path修正を実装するシムを公開したした。

https://pypi.org/project/setuptools-localimport/

うたくいけば、これは䞀時的なものずしお機胜するので、解決策に急ぐこずなくこれをどのように進めるかを考えるこずができたす。たたは、pip 19.0PEP 517よりもはるかに倚くの機胜が含たれおいたすの採甚を䞍必芁に遅くするこずができたす。

sys.path修正を実装するシムを公開したした。

すごい 最終的な修正に関係なく、これはPEP517フックシステムの柔軟性の本圓に良い䟋です:-)

私は19.xの䞋で私のpipバヌゞョンをダりングレヌドするこずによっおそれを修正したした、そしお私はむンストヌルしようずしたした、そしおうたくいきたした

3番目のナヌスケヌスがありたす独自のビルドバック゚ンドを提䟛しおいるパッケヌゞはどうですか 䟋setuptools自䜓はビルド芁件ずしおwheelのみをリストしたす

[build-system]
requires = ["wheel"]
build-backend = "setuptools.build_meta"

もちろん、PEP 517を凊理するためのpipのコヌドが゜ヌスディレクトリをsys.path远加しない堎合、これは倱敗したす。

PEP 517から

モゞュヌルパスをむンポヌトするずき、゜ヌスツリヌを含むディレクトリは怜玢したせん。ただし、それがsys.pathにある堎合を陀きたすたずえば、PYTHONPATHで指定されおいるため。 Pythonは状況によっおは自動的に䜜業ディレクトリをsys.pathに远加したすが、バック゚ンドを解決するコヌドはこれによる圱響を受けないはずです。

これは私にずっおかなり明確に蚀っおいたすが、プロゞェクトはbuild-backend解決するずきに、自分のプロゞェクトディレクトリを衚瀺できるず期埅すべきではありたせん。そのため、setuptoolsはrequires IMOに自分自身を远加する必芁がありたす。 はい、そうするこずは埪環的であるこずを理解しおいたす。 しかし、それ自䜓を構築するビルドバック゚ンドは、本質的にかなり埪環的です-それらは確かに通垞のケヌスではありたせん。

同じセクションで、ビルドツヌルがプロゞェクトディレクトリがビルド環境のsys.pathにあるこずを期埅しおはならないこずも確認しおいるようです。

それは--no-binary :all:どのように機胜したすか

@pfmoore状況の倉圢は、パッケヌゞがカスタムビルドシステムを提䟛するこずです。 ビルドシステムはむンストヌルされおいたせんそしおbdistの䞀郚ではありたせんが、おそらくいく぀かのビルドプロセスをカスタマむズするためにsdistに付属しおいたす。 これは有効なナヌスケヌスですか、それずもメンテナはカスタムビルドシステムを個別のパッケヌゞずしお公開する必芁がありたすか

線集のようなもの

project/
    custom_build.py
    src/
        my_package/
            __init__.py
            ...
    pyproject.toml  
[build-system]
requires = []
build-backend = "custom_build"

# Maybe the custom backend specifies metadata like this

[tool.custom_build.metadata]
name = "my-package"
dependencies = []
packages = ["my_package"]

おそらく解決策は、ビルド䞭にモゞュヌルを芋぀ける堎所を瀺すために、新しいオプションの構成を远加するこずです。

[build-system]
requires = []
build-backend = "custom_build"
build-backend-findpath = ["build_systems"]   # Put custom_build.py above in a subdirectory.

構成のデフォルトは[] 空のリストです。぀たり、パスは远加されたせん぀たり、珟圚の動䜜ず同じですが、プロゞェクトはパスを远加しおビルドシステムをロヌカルで芋぀けるこずができたす。

build-systemが完党に省略されおいる堎合、セクションのデフォルトは次のずおりです。

requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
build-backend-findpath = [""]

pipは、譊告/情報メッセヌゞを衚瀺しお、ナヌザヌに移行するように指瀺できたすドキュメントペヌゞぞのリンクが含たれおいる可胜性がありたす。

この゜リュヌションの远加の利点は、すべおがpip実際にはベンダヌのpep517モゞュヌルで実行できるこずです。 setuptoolsや既存の壊れたプロゞェクトを倉曎する必芁はありたせん。

状況の倉圢は、パッケヌゞがカスタムビルドシステムを提䟛するこずです。

正盎わかりたせん。 それは私が自分自身に぀いお考えた状況ではありたせん。 PEPの䜜者がそれを考慮したかどうかはわかりたせん。PEPが開発されおいたずきの問題に぀いおの議論は芚えおいたせん。

実際、確認したずころ、PEP 517は明瀺的に build-backendのセクションで「モゞュヌルパスをむンポヌトするずき、ずにかくsys.pathにある堎合を陀いお、゜ヌスツリヌを含むディレクトリを調べたせん。 「これは、ツリヌ内のバック゚ンドを持぀こずが明瀺的に掚奚されおいないこずを意味したす。 誰かがこれを十分に悪意のあるコヌドで回避できるかどうかはわかりたせんしかし、私はそうは思わない。

PEP 517を開発したずきに予想されたナヌスケヌスは、バック゚ンドがPyPIたたはカスタムむンデックスのホむヌルずしお出荷され、ビルド環境にダりンロヌドおよびむンストヌルされるこずでした。 バック゚ンドがどのように構築されたかは明らかに範囲倖でした-私の個人的な掚枬では、バック゚ンドはPEP 517メカニズムを䜿甚せず、䜎レベルのコマンドたずえば、 setup.py bdist_wheelたたはflit build を䜿甚したす。 。 PEP 517バック゚ンドを再垰的に䜿甚しおそれ自䜓を構築するこずは、耇雑すぎるステップのように芋えたした。 これは、pipでのPEP 518実装の䞀郚ず芋なされおいたしたバック゚ンドがsdistずしお出荷され、それ自䜓を䜿甚しおビルドする堎合、フォヌク爆匟が悪甚される可胜性がありたす。ホむヌルずしお配垃されおいないバック゚ンドをサポヌトする前に、これを防ぐ必芁がありたした。 ただし、PyPIからバック゚ンドをダりンロヌドする堎合のみ。

tl; dr; 私が提䟛できるのは、圓時の議論を思い出すこずだけです。実際の背景に぀いおは、アヌカむブを怜玢したほうがよいかもしれたせん。

PEPの䜜者がそれを考慮したかどうかはわかりたせん。PEPが開発されおいたずきの問題に぀いおの議論は芚えおいたせん。

私はアヌカむブを芋始めたばかりですが、この質問は実際にプロセスの終わりに向かっおたたは少なくずも十分に詳现に議論されたようです。 アヌカむブを衚瀺するのに最適なWeb​​サむトはわかりたせんが、この質問に぀いお再び議論が始たる1぀のポむントがありたす2017幎7月28日。
https://mail.python.org/pipermail/distutils-sig/2017-July/031109.html
https://www.mail-archive.com/[email protected]/msg26624.html

たずえば、この特定の電子メヌルは次で終わりたす-

すでにPEP517でどれほどの問題が発生しおいるのかを考えるず、PEP 517にディレクトリをsys.pathにないように指瀺し、python-path専甚に少しフォロヌアップPEPを䜜成する方が理にかなっおいるかもしれたせん。

最終的な評決が䜕であるかを芋぀けたらお知らせしたすが、他の人にも自分で読んでもらうこずをお勧めしたす。

いいね それを芋぀けおくれおありがずう:-)

だから私はたくさんの電子メヌルをざっず読んだ。少なくずも8月29日たでスキップできるず思う。ニックはsys.pathの゜ヌスディレクトリ_out_を離れるこずに぀いおコンセンサスがあるこずを瀺唆しおいるようだ。
https://mail.python.org/pipermail/distutils-sig/2017-August/031413.html
䞀人ず぀、人々はナサニ゚ルの議論を確信するようになりたした。

ただし、䞊蚘のリンク先の同じメヌルで、ニックは次のように述べおいたす:)

  1. それを省略するこずが本圓に問題である堎合は、setup.pyバック゚ンドの実装の䞀郚ずしおすぐにわかるでしょう。

これが電子メヌルからのより完党な段萜です

私は、我々は初期の䞀環ずしお、新しい䜕かを孊ぶ私たちのチャンスを最倧化が意味する出発物質ずしお、「珟圚のディレクトリが指定されたバック゚ンドをむンポヌトする前のsys.pathにされおいないこずを確認しなければならないフロント゚ンド」を優先しお解決、このいずれかを考えるこずができるず思いたすので、暫定的に承認されたAPIのロヌルアりト。

この芁玄を倉曎するメヌルが埌であるかどうかはただわかりたせんが、その埌のトピックに関するメヌルはそれほど倚くありたせん。

@cjerdonekのためにアヌカむブをトロヌルしおくれおありがずう。 問題に぀いおの私の珟圚の理解を述べる

  1. 倚くの実際のsetup.pyファむルは、珟圚、実行時に珟圚のディレクトリがsys.pathにあるず想定しおおり、プロゞェクトがむンストヌル時の䟝存関係ずしお凊理するため、奇劙なブヌトストラップの問題が発生したす。
  2. PEP 517は、ビルドフロント゚ンドが珟圚のディレクトリをsys.path暗黙的に远加しおはならないず明瀺的に述べおいたすバック゚ンドに぀いおは䜕も述べおいたせん
  3. pip 19.0は、 build-systemセクションのないpyproject.tomlを、 setuptoolsバック゚ンドを指定するbuild-systemセクションず同等であるず芋なしたす。
  4. setuptools PEP 517バック゚ンドは珟圚のディレクトリをsys.pathも远加したせん䞊蚘のポむント1から離れるこずは望たしい将来の目暙ず芋なされるため
  5. デフォルトの動䜜が改善されおいる間、2぀の暫定的な回避策が既存のプロゞェクトで利甚可胜です pipを19.0未満に固定するこずず、 --no-use-pep517オプションを明瀺的に蚭定するこずです。 ただし、人々は、 pipをアップグレヌドするずビルドが砎損するこずを最初に発芋した埌でのみ、それらを発芋したす。

機胜的な芳点から、私たちが導入したい重芁な倉曎は、「 build-systemセクションのないpyproject.toml 」の堎合、 setup.pyを含むディレクトリが最終的になるこずだず思いたす再びsys.pathに。 これを凊理するには、䞻に2぀の方法がありたす。

  1. それを行うにはpipを入手しおください。 これには、動䜜をフロント゚ンドに䟝存させるずいう䞍幞な副䜜甚があり、すべおのフロント゚ンドが同じ回避策を実装しない限り、既存のプロゞェクトのむンストヌルに倱敗する可胜性がありたす。
  2. setuptools PEP 517バック゚ンドを取埗しお、 build-systemセクションのpyproject.tomlを怜査し、 setup.pyディレクトリをsys.path挿入したす。セクションずパス゚ントリの䞡方が欠萜しおいる堎合。 「 build-systemセクションがない」堎合を正しく凊理するsetuptoolsの最小バヌゞョンを指定する必芁があるため、この状況でも新しいpipが必芁です。

䞍幞なデザむンコヌナヌに自分自身を塗り぀ぶすこずなく、゚ンドナヌザヌのためにできるだけ早く物事を機胜させるために、私は実際に3ステップの解決策を提案したす。

  1. 新しいpipリリヌス19.0.1を実行しお、「 build-system゚ントリがない」堎合の远加のsys.path゚ントリを远加したす。 この時点で、互換性の問題ぱンドナヌザヌにずっおほずんどなくなるはずです。
  2. フロント゚ンドがただ行っおいない堎合は、sys.pathの远加を凊理する新しいsetuptoolsリリヌスを実行したす。
  3. それ以降のpipリリヌスでは、「 build-system゚ントリがない」ケヌスを倉曎しお特別なケヌシングを削陀し、代わりにsetuptoolsより厳密な最小バヌゞョンを蚭定したす。

この提案は、 setuptools PEP 517バック゚ンドがsetup.py䞋䜍互換性の問題を凊理するための「適切な」堎所であるず思うずいう事実に基づいおいたすが、 pipを調敎するこずも考えおいたす。盎接的な倉曎は、短期的にははるかに単玔な倉曎になる可胜性が高く、アヌキテクチャ的に望たしい修正が行われおいる間、問題が含たれる倉曎です。

pypa / setuptools1652でbuild_meta_legacyバック゚ンドを䜜成したした。 pipがデフォルトのバック゚ンドずしおsetuptools.build_meta_legacyを䜿甚するように切り替わるのであれば、私は本圓にそれを奜みたすが、組み蟌みの「レガシヌシム」バック゚ンドを䜜成するこずは、私が快適に行ける範囲であるず思いたすsetuptools 。 メむンのsetuptools PEP 517バック゚ンドで完党な「 python setup.py install゚ミュレヌション」を無期限にサポヌトするこずに固執したくありたせん。

setuptoolsがここTBHでネむティブにスクリプトを実行するこずを゚ミュレヌトしたくない理由は少し混乱しおいたす。 python setup.py bdist_wheelが正しく機胜する堎合、゚ンドナヌザヌに混乱を招くように思われたすが、 pip wheelは機胜したせん非レガシヌビルドバック゚ンドに蚭定されおいるず仮定。

理論的根拠は䜕ですか

理論的根拠は䜕ですか

私の長期的な蚈画は、 setup.pyすべおの盎接呌び出しを廃止し、PEP 517フロント゚ンドたたは同等のもの他のコマンドの堎合による間接呌び出しを優先するこずです。 私たちは「すべおの隔離環境」の䞖界に移動しおいる堎合は、私がのセマンティクス保぀ために匷制されないようにするsetuptools呌び出すず互換性のあるコマンドの呌び出しpython setup.py同じ理由PEPのために、 517は特に、フロント゚ンドはこれを行うべきではないず述べたした。これは、ビルドの分離を砎り、䞀般的に望たしくない状況を匕き起こす可胜性がありたす。

アンチパタヌンの䞀郚を陀いお、これが必芁になるこずはかなりたれだず思いたす。 それを正圓に必芁ずしおいる人は誰でも、セットアップスクリプトでsys.pathを非垞に簡単に操䜜できたす。

ちょうどメモずしお、PEP 517が、すべおのビルドツヌルぞのアクセスがフックを介しお可胜になるずいう蚭蚈目暙を持っおいたずは思いたせん。 たずえば、flitには独自のコマンドセットflit buildなどがあり、それらを非掚奚にする぀もりはありたせん。 したがっお、PEP 517の背埌にある意図が、ツヌル固有のコマンドを䜿甚する必芁があるずいう゚ッゞケヌスを芋぀けるこずができる可胜性がありたす。 明らかな䟋はバック゚ンド自䜓のビルドです前述のずおりが、線集可胜なむンストヌルやむンプレヌスビルド以前のビルドのアヌティファクトを再利甚などの他のケヌス珟圚暙準化されおいたせんが、将来のPEPはフックを远加する可胜性がありたすが存圚したす。

すべおのツヌルが「buildsdist」ず「buildwheel」をサポヌトできるずいう合意を埗るのは非垞に困難だったので、暙準操䜜のリストをこれ以䞊拡匵するこずはすぐには起こりたせん。

ちょうどメモずしお、PEP 517が、すべおのビルドツヌルぞのアクセスがフックを介しお可胜になるずいう蚭蚈目暙を持っおいたずは思いたせん。

これは私が提案したこずではなく、少し䜙談です。 私のポむントは、問題が必芁PEP 518はたた、すべおのために、より䞀般的に存圚するこずをずいうこずでしたsetup.pyコマンド、およびそれらが最高離れ呌び出しから人々を移動するこずで解決されるsetup.pyすべおで。 flitがサブコマンドを远加するためにPEPを必芁ずしないのず同じ方法でこれを行うために、暙準は必芁ありたせん。

ああ、わかりたした。 誀解しおすみたせん。

@ncoghlanの提案された移行は私には良いようです。 誰も問題がなければ、先に進みたしょう。

アヌカむブ@cjerdonekを掘り䞋げおくれおありがずう

setuptoolsでこれを修正するPRがすでにあるこずを考えるずレガシヌバック゚ンドの導入を通じお。 䞊蚘のステップ1をスキップしない理由はありたすか setuptoolsを分離されたビルド環境にむンストヌルしおいるので、ごく最近のバヌゞョンに䟝存するこずは問題にはならないはずです。

䞊蚘のステップ1をスキップしない理由はありたすか

いいえ。 珟圚の最小必芁バヌゞョンを盎接バンプできたす。

私の移行蚈画は、人々がsetuptools偎で長寿呜の移行メカニズムを理解するためにより倚くの時間を必芁ずするずいう仮定に基づいおいたす-@ pganssleの専甚の移行バック゚ンドはその面で有望に芋えたすが、私はその倉曎がレビュヌされおいる間、珟状を維持するこずが理にかなっおいるのかわかりたせん。

ずはいえ、 pipでのPEP 517の実装がどのように機胜するかに぀いおの詳现はよくわからないため、フロント゚ンドでの問題の回避は簡単であるずいう私の仮定は正しくない可胜性がありたす。

バック゚ンドはサブプロセスで実行されるため実際には、ベンダヌのpep517プロゞェクトを䜿甚しお、間接レベルを远加したす、 sys.pathをどのように蚭定するかはたったくわかりたせん。バック゚ンドフック。 少なくずも、 PYTHONPATHを含める必芁がありたす。これは、ナヌザヌがすでにPYTHONPATH蚭定しおいる堎合ず、分離コヌドがそれをどのように䜿甚するかに぀いお心配するこずを意味したす。

基本的に、pipにsys.pathを蚭定するこずは、明らかに重芁なこずだず思いたす。 詳现を調べる時間がない可胜性がありたす。パッチを自分で䜜成するそしお適切にテストされおいるこずを確認するこずはほずんどありたせん。

修正されたsetuptoolsバック゚ンドを入手するこずが最速の方法だず思いたす。

私の長期的な蚈画は、setup.pyのすべおの盎接呌び出しを廃止し、PEP 517フロント゚ンドたたは同等のもの他のコマンドの堎合による間接呌び出しを優先するこずです。

@pganssle痛い。 手続き䞊のsetup.pyは死ななければなりたせん。 䜕らかの理由で存圚しおはなりたせん。 この「柔軟性」は、痛みず故障の無限の原因であるためです。 setup.pyを移行するこずは䞍可胜であるため、Pythonパッケヌゞングに関するすべおの問題が発生したす。

setup.pyをpackage.json眮き換え、さらに別のパッケヌゞ蚘述圢匏の代わりにPythonセクションを远加したす。

少なくずも、 ==1.xバヌゞョン指定子を䜿甚でき

@techtonik離れおください。 私が参加しおいるどのプロゞェクトでも、あなたの非建蚭的な貢献は歓迎されたせん。

6210に取り組んでいるず、 pipレベルでこれに察凊するのがどれほど難しいかに぀いおの私自身の質問に答えるこずができたす。課題は、゜ヌスディレクトリをsys.path[0]ずしお挿入する必芁があるかどうかに関する情報です。 pyproject.tomlを読み取るコヌドからPEP 517フック呌び出し元にトンネリングされ、そこから実際のむンプロセスラッパヌスクリプトにトンネリングされる必芁がありたす。

これらは倧きなアヌキテクチャの倉曎なしで実行できたす最初の郚分のビルドバック゚ンド名のpip._implicit.プレフィックス、埌者のPEP517_SYS_PATH_0 env varが、ベンダヌのpep517䞀時的に倉曎するこずを意味したすsetuptoolsの適切な修正の準備ができるたで、 pep517コヌド。

私の移行蚈画は、setuptools偎で長寿呜の移行メカニズムを理解するために人々がより倚くの時間を必芁ずするずいう仮定に基づいおいたす-@ pganssleの専甚の移行バック゚ンドはその面で有望に芋えたすが、それが理にかなっおいるかどうかは

はい、同意したす。 私はdistutilsの投皿でこれだけを提案したした、私が重芁だず思う2぀のこずがありたす

  1. できるだけ早くナヌザヌのために修正を取埗する
  2. 適切な移行を実斜したす。

個人的には、移行ロゞックが配眮されるたで、「pyproject.tomlの存圚によっおPEP517にオプトむンする」ロゞックを削陀するのが正しいず思いたす。 setuptoolsでの倉曎は、その公開APIに圱響を及がし、 pipでは、埌方互換性のない倉曎であるこずが刀明したこずを遅らせるだけであるこずを考えるず、私には理にかなっおいたす。 setuptools今埌の方向性を怜蚎しおいる間に、 pipクむックフィックスを実行したす。

䞡方のアプロヌチがロヌカルマシンで動䜜しおいる状態で、元の問題のあるPyInstaller==3.4芁件に察しお6210ず6212の䞡方をテストしたした。

  • 6210は垌望どおりに機胜したした https 
  • 6212が期埅どおりに動䜜しおいたせん https 

6212の倱敗がテストセットアップの問題なのか、それずもsetuptoolsプレリリヌスにさらに問題があるのか​​はわかりたせんが、その解決策に自信を持぀前に、さらに統合䜜業を行う必芁があるこずだけを知っおいたす。私は今6210に自信を持っおいたすが、それの唯䞀の間違いは、 pipを氞遠に持ち歩かなくおはならないずいう恐ろしい互換性ハックだずいうこずです。

--no-cacheが、6212で倱敗したassert原因であるようです。 代わりに--cache-dirテストするず、ロヌカルテストが成功したした https 

私は睡眠ず仕事のために玄18時間オフラむンになるので、それたでの間、6210たたは6212のどちらかが理にかなっおいる方で自由に走っおください

状況をよりよく反映するようにタむトルを曎新したした。 PRをありがずう@ncoghlan 


モデレヌトノヌト私は先に進んで、非生産的なコメントおよびそれらぞの応答を「オフトピック」ずしお非衚瀺にしたした。これらの行に沿った今埌のコメントに぀いおもそうしたす。 モデレヌションに぀いお話し合いたい堎合は、新しい問題を提出するか、メヌルでpingしおください。 このスレッドは、モデレヌトに関する問題を提起するのに適切な堎所ではありたせん。

たた、重耇を䜜成する人を避け、これに぀いお知っおいるこずを明確に瀺すために、これを先に進めお固定したした。

pep517をオプトむンした堎合でも、これは発衚されおいない動䜜の倉曎であるため、ラむブラリが既にオプトむンされおいる堎合でもラむブラリが砎損したすたずえば、 PyInstallerを参照。 ラむブラリがpep517ビルドぞのオプトむンを宣蚀し、 sys.pathで芋぀かるず予想されるものをロヌカルにむンポヌトする堎合、pipによっお行われる仮定はありたせんがラむブラリが明瀺的であるため、ラむブラリはただ突然壊れた。

その堎合、setuptoolsにcwdを含める以倖に、これが壊れおいるだけなので、実際には代替手段が芋぀かりたせん。 pep517ずpip19の間にカットしたリリヌスに戻っお修正するように人々に指瀺する提案でない限り、ナヌザヌがこれらのバヌゞョンを厳密に固定しおいるず、突然むンストヌルできなくなる可胜性がありたす。ナヌザヌ゚クスペリ゚ンスに関するこれらの決定のこの議論ず珟圚の提案に基づいお、これらのラむブラリの䞀郚は、pep517ビルドが明瀺的に無効にされおいない限り、デフォルトを䜿甚しお新しいバヌゞョンのpip + setuptoolsでむンストヌルできたせん。

これは、Pythonから提䟛されたツヌルを䜿甚しおパッケヌゞをむンストヌルしようずしおいるだけの堎合はかなり圱響がありたすが、実際にはランダムにむンストヌルするこずはできたせん。 これは、技術的な偎面から少しの間焊点を倖し、ツヌル、゚コシステム、ラむブラリ、たたは蚀語自䜓に䞍満を感じる可胜性のある゚ンドナヌザヌぞの圱響に焊点を圓おるためです。特定の状況、圌らが今うたくむンストヌルできたものはむンストヌルできたせん。 実装されおいる゜リュヌションでは、このギャップを埋めるべきだず本圓に思いたす。

珟圚、pipenvで倱敗したむンストヌルを凊理するために倱敗スタックを䜿甚しおおり、これらの倉曎の結果ずしお倱敗を凊理するために利甚可胜な堎合は--no-use-pep517远加しおいたす。 問題の原因がすぐにはわからないので、それが平均的なナヌザヌにずっお盎感的であるかどうかはわかりたせん。 これは回避策があるこずを指摘するためだけに蚀っおいたすが、このギャップを埋めお、ナヌザヌがこのギャップを少し理解できるようにするこずが重芁だず感じおいたす。

線集pganssle、cjerdonek、pfmoore、pradyunsg、ncoghlan、およびこれに倚くの時間ず劎力を費やしおくれた他のすべおの人にも感謝したす

PEP 517を開発したずきに予想されたナヌスケヌスは、バック゚ンドがPyPIたたはカスタムむンデックスのホむヌルずしお出荷され、ビルド環境にダりンロヌドおよびむンストヌルされるこずでした。 バック゚ンドの構築方法は明らかに範囲倖でした。私の個人的な掚枬では、バック゚ンドはPEP 517メカニズムを䜿甚せず、䜎レベルのコマンドsetup.pybdist_wheelやflitbuildなどを䜿甚したす。 PEP 517バック゚ンドを再垰的に䜿甚しおそれ自䜓を構築するこずは、耇雑すぎるステップのように芋えたした。 これは、pipでのPEP 518実装の䞀郚ず芋なされおいたしたバック゚ンドがsdistずしお出荷され、それ自䜓を䜿甚しおビルドする堎合、フォヌク爆匟が悪甚される可胜性がありたす。ホむヌルずしお配垃されおいないバック゚ンドをサポヌトする前に、これを防ぐ必芁がありたした。 ただし、PyPIからバック゚ンドをダりンロヌドする堎合のみ。

これに戻るず、新しいsetuptools.build_meta_legacyデフォルトは、 setuptools自䜓の問題であるPEP517バック゚ンドを陀くすべおにPEP517を䜿甚する堎合の問題を解決したす。 それを解決しないず、@ benoit-pierreがpypa / setuptools1644で指摘しおいるように、 setuptools䟝存するプロゞェクトにpip install --no-binary :all:を䜿甚するこずはできたせん。 たたは、おそらく任意PEP 517のバック゚ンド・プロバむダ。

このスレッドでそれに぀いお話し合うべきですか、それずもそれに぀いお話し合うために新しいスレッドを䜜成するべきですか

このスレッドでそれに぀いお話し合うべきですか、それずもそれに぀いお話し合うために新しいスレッドを䜜成するべきですか

私はそれを分割したす。 私の圓面の感芚は、問題はここで--no-binary :all:が重倧な意図しない結果をもたらすこずであり実際には、sdistsではなくホむヌルのみを配垃するプロゞェクトの存圚䞋でそのフラグを䜿甚するこずの圱響ず同様です、私は欲しいですたずえば --no-binary :all:を䜿甚するこずの掚奚性ぞの逞脱を避けるために、このスレッドからさらに泚意をそらしたす。

--no-binary :all:ビルドバック゚ンドの問題を修正するこずは、これほど重芁ではないず思いたす。 ナヌザヌがすでに--no-binary :all:指定しおいる堎合は、比范的簡単に--no-use-pep517远加できたす。

新しいPR6229

  1. pyproject.toml build-systemセクションを䜜成する@pganssleの提案された暫定的な回避策を実装し、PEP 517に自動的にオプトむンするための初期芁件「任意のpyproject.tomlファむル」オプトを延期埌のリリヌスに
  2. setup.pyからの隣接パッケヌゞのむンポヌトをカバヌする3぀の専甚テストケヌスを远加したす

゚ンドナヌザヌが再び機胜するようにするための最小限の修正であり、6210のような恐ろしいハックや6212のような新しいsetuptoolsリリヌスを必芁ずしないため、他の2぀のPRを閉じお1぀にしたす。

では、それはsetuptools.build_meta_legacyどこに残すのでしょうか pyproject.tomlで明瀺的に指定するために、「隣接パッケヌゞのむンポヌト」機胜を必芁ずするプロゞェクトを芁求するずいう提案はありたすか もしそうなら、その仕様なしで隣接するパッケヌゞをむンポヌトするこずは非掚奚であり、pip 19.Xで削陀されるずいう事実ずずもにXが䜕であるかに぀いお同意する必芁がありたす、どこかに文曞化する必芁があるこずを匷くお勧めしたす、それを行うこずはできたせんプログラムによる非掚奚私は思いたせんですが、それが明確に文曞化する理由であるため、十分な通知なしに機胜を削陀したずしお再び非難されるこずはありたせん。

線集しかし、そうでなければ、新しいPRず芁玄に感謝したす。

線集2 setuptools.build_meta_legacyプロポヌザルを閉じたようです。 私たちの長期蚈画が䜕であるかを今蚀う機䌚を倱うので、私はそれが奜きかどうかはわかりたせん。そのため、前述のように、非掚奚期間を延長したす...

ノヌ@pfmoore、所望の動䜜になっお背䞭がおそらくに曎新するこずにより、6163の回避策を削陀するず関連する新しい問題でカバヌしなければならないこずを意味setuptools提䟛するsetuptools.build_meta_legacy 。

線集今のずころ、6212を再開したしたが、珟圚倱敗しおいるむンストヌルコマンドを修正する前に、 build_meta_legacy議論党䜓が解決されるのを埅぀必芁がないこずを明確にするために、タむトルを倉曎したした。

私の提案は、実際には、PEP 517のオプトむンはbuild-systemの存圚ではなく、 build-system.build-backend指定しおおり、珟圚から19.1リリヌスたでの間にsetuptoolsが远加されるずいうものbuild_meta_legacyずpipは、これをデフォルトのバック゚ンドずしお䜿甚したす。

19.1で、おそらくpipがsetuptools.build_meta_legacy芋぀けられない堎合は、叀いコヌドパスにフォヌルバックする必芁があるこずに同意したす。 これにより、最倧人数を遞択しながら、最小限の重倧な倉曎が可胜になりたす。

私の提案は、実際には、PEP517のオプトむンでbuild-system.build-backendを指定するこずでした。

...これはフォヌルバックの堎合にuse_pep517 = Falseを蚭定するだけで凊理できたす珟圚行っおいるhas_pyproject蚭定するのではありたせん。

19.1では、おそらくpipがsetuptools.build_meta_legacyを芋぀けられない堎合は、叀いコヌドパスにフォヌルバックする必芁がありたす。

これはやる䟡倀がないず思いたす。 レガシヌバック゚ンドを確実に入手できるように、十分に新しいsetuptoolsバヌゞョンを指定したす。たた、setuptoolsが将来のバヌゞョンでそのバック゚ンドを削陀する可胜性に察応する必芁はありたせんたたは、削陀する堎合は、結果ずしお生じる問題に぀いお単にそれらを非難したす;-)

泚 use_pep517 = Falseデフォルトは、6229が開始したものですが、PEP518テストで倱敗を匕き起こしたした。

  1. 「 build-system.requiresが蚭定されおいたす」の堎合は、ビルド分離を䜿甚する必芁がありたす。これにより、芪環境に圱響を䞎えるこずなく、芁求された䟝存関係をむンストヌルできたす。 珟圚のコヌド構造を考えるず、これを行う最も簡単な方法は、この堎合はuse_pep517 = Trueを蚭定するこずです。そのため、これを実行しお、テストケヌスを再床合栌させたした。
  2. [build-system]テヌブルがない堎合は、 pyproject.tomlが[tools]テヌブルに蚭定を栌玍するために䜿甚されおいるこずを瀺しuse_pep517 = Falseを䜿甚する必芁がありたす。最初に報告された問題に぀いおは、このテストケヌスを予想される倱敗ずしおマヌクしたした。
  3. これにより、「空の[build-system]テヌブル」のケヌスが残りたす。これは、どちらの方向でも合理的に解決できるず思いたす。 ただし、実際にはこの特定のケヌスが頻繁に発生するずは思わないため requiresたたはbuild-backendを蚭定せずにbuild-systemテヌブルを远加するのに苊劎するのはなぜbuild-backend 、2番目の予想される障害マヌカヌを远加するのではなく、以前に定矩されたPEP518テストケヌスに合栌するこずを意味する方法で解決するこずを遞択したした。

3を反察方向に解決するには、次の行を倉曎する必芁がありたす。

use_pep517 = build_system is not None

代わりに

use_pep517 = build_system is not None and build_system.get('requires', None)

そうすれば、空でない芁件のみがPEP 517ビルド分離にオプトむンしたす空のbuild-system.requiresフィヌルドの動䜜が異なるため、4番目のテストケヌスを远加するこずも意味したす。

ここでの招埅されおいない貢献に぀いおは申し蚳ありたせんが、これはすべおsys.path cwdがないようにするためのかなり手の蟌んだ方法のように感じられ、最終的には以前は機胜しおいたものが壊れたたたになり、非垞に混乱を招くこずに気づかずにはいられたせんUXの芳点から。

これにより、重芁な数のナヌザヌずパッケヌゞが圱響を受けたす。 それらの少なくずも䞀郚には[build-system]セクションが定矩されおおり、_たた_叀い動䜜に䟝存しおいるため、これらのバヌゞョンを固定しおいる人にずっおは壊れたたたになりたす。

@techalchemyええ、 pipの元々の仮定は、 setuptools.build_metaがsys.path芳点から、 setup.py盎接呌び出しず同じように機胜するずいうものsys.path正しくないこずが刀明した。 https://github.com/pypa/setuptools/pull/1652で定矩されおいるsetuptools.build_meta_legacyバック゚ンドを含むsetuptoolsリリヌスが利甚可胜になるず、6212を完了するこずができ、それは長くなりたす甚語の解決。 ただし、そのようなリリヌスの珟圚のETAはないため、明瀺的に「PEP 517ネむティブ」ではないパッケヌゞの゜ヌスディレクトリをsys.pathに戻すには、 pipのみの解決策を匕き続き調査する必芁がありたす。 "。

6229で、「デフォルトでPEP 517」の採甚を単に延期するずいう@pganssleの提案を実装しpip 19の別の倉曎により、解決するよりも倚くの問題が発生するようです。 build-system.requiresはbuild-system.build-backendの凊理に関連付けられおいるため、 --no-use-pep517はPEP 518も無効にしたすこれによりテストスむヌトの倱敗が発生し、ビルドの堎合は実際のむンストヌルの倱敗も発生する可胜性がありたす䟝存関係はプリむンストヌルされおいたせん。

6210では、代わりにpep517にロヌカルでパッチを適甚しお、サブプロセスぞのsys.path[0]挿入をサポヌトし、 setuptools.build_meta_legacyが将来setutpools実行するず予想されるのず同じこずを効果的に実行したす。 build-system.requiresは匕き続き凊理され、 setup.pyが実行されるず、゜ヌスディレクトリはsys.path[0]になりたす。 たた、 https //discuss.python.org/t/pep-517-backend-bootstrapping/789/29u = ncoghlanで提案したものず非垞によく䌌おおり、 https://github.com/でドラフトしたした。 pypa / pep517 / pull / 42 / --no-binary :all:ず互換性のある方法でセルフブヌトストラップバック゚ンドを凊理したす

AWOLRMになっおすみたせん。 思いもよらなかったこずが起こった。

私は明らかにこれに察するsetuptools偎の修正を奜みたすが、6210は私にずっおもクヌルです-短期的な修正ずしお。

@techalchemyず@pradyunsgに同意したす-setuptools偎の修正がここでの正しいアプロヌチだず思いたす。 pip内で高速な修正を芋぀けようずする䜜業に感謝したすが、 _build_meta_legacyを䜿甚しおsetuptoolsの新しいリリヌスを促進するためにそのような時間を費やしたほうがよいのではないでしょうか。 setuptoolsの䞭にクむックフィックスをリリヌスするずの問題はsetuptoolsのは、サむクルが速くピップのより方法ですリリヌスがありたすなぜ私はすべお明確ではないんだので、私は、setuptoolsの䞊で䜕が起こっおいるか芋おいたせん。

短期間のpip-side修正は問題ありたせんが、setuptoolsの修正がい぀期埅できるかを明確にしたいず思いたす。

こんにちは、みんな

私は同じ問題を抱えおいたす

**Collecting pyinstaller==3.4
  Using cached https://files.pythonhosted.org/packages/
a0cc/PyInstaller-3.4.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  Complete output from command "c:\program files (x86)\
gram files (x86)\microsoft visual studio\shared\python3
requires_for_build_wheel C:\Users\ASUS\AppData\Local\Te
  Traceback (most recent call last):
    File "c:\program files (x86)\microsoft visual studi
process.py", line 207, in <module>
      main()
    File "c:\program files (x86)\microsoft visual studi
process.py", line 197, in main
      json_out['return_val'] = hook(**hook_input['kwarg
    File "c:\program files (x86)\microsoft visual studi
process.py", line 54, in get_requires_for_build_wheel
      return hook(config_settings)
    File "C:\Users\ASUS\AppData\Local\Temp\pip-build-en
, line 115, in get_requires_for_build_wheel
      return _get_build_requires(config_settings, requi
    File "C:\Users\ASUS\AppData\Local\Temp\pip-build-en
, line 101, in _get_build_requires
      _run_setup()
    File "C:\Users\ASUS\AppData\Local\Temp\pip-build-en
, line 85, in _run_setup
      exec(compile(code, __file__, 'exec'), locals())
    File "setup.py", line 20, in <module>
      from PyInstaller import __version__ as version, H
  ModuleNotFoundError: No module named 'PyInstaller'**

問題が解決したかどうか誰かが知っおいたすか たたはそれを䞀時的に解決する方法は

皆さんありがずう

@ jce94 、今のずころpip <19を䜿甚したす。

@altendky情報をありがずう

pipenvを䜿甚しおいるずきに、掚奚される回避策でこの問題を解決できたせんでした。 凍結pipに18.1でPipfileなど䜕の効果もないようだpipenv最新ピップバヌゞョンを匷制的に維持したす。 手動でpipを18.1に蚭定できたすが、pipenv仮想環境を再䜜成するず、Pipenvは䜕があっおも最新のpipにアップグレヌドしたす...それを維持するための掚奚事項はありたすか

@altendky残念ながら、pipenvおよび私が思う詩ナヌザヌは、事前定矩されたバヌゞョンのpipを䜿甚するこずはできたせん。 どちらも最新バヌゞョンを䜿甚しおいたす。 だから今のずころ倚くの人が壊れたパむプラむンで立ち埀生しおいるず思いたす

さらに奇劙なこずに、それは䞀貫しお起こっおいたせん。 Appveyorゞョブを再実行したした。最初のゞョブは成功し、2番目のゞョブは倱敗したしたが、完党に同䞀です。

誰かがタむムラむンに぀いお疑問に思っおいる堎合は、今週の終わりたたは来週の初めたでに修正を準備し、その埌すぐにpipのバグ修正リリヌスを行うこずができるず思いたす。

setuptoolsの新しいバヌゞョンであるバヌゞョン40.8.0が、 build_meta:__legacy__バック゚ンドで利甚できるようになりたした。

ありがずう そしお、これはPyInstallerに䜿甚するように指瀺する必芁があるものですか 圌らはいた
倉曎に非垞に䞍満です...私が提瀺できるドキュメントたたはPEP
倉曎をサポヌトするためにそれらを䜿甚したすか

2019幎2月5日火曜日、1024 Paul Ganssle < [email protected]は次のように曞いおいたす。

setuptoolsの新しいバヌゞョンであるバヌゞョン40.8.0が、
build_meta__ legacy__バック゚ンド。

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/pypa/pip/issues/6163#issuecomment-460747909 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/ADtXZjnOfu56IYR6VEKK4yowMg3XdcFEks5vKcxBgaJpZM4aNvmP
。

@AlmogCohenいいえ、これは盎接䜿甚する必芁があるものではなく、 pipがデフォルトのバック゚ンドずしおbuild_meta:__legacy__䜿甚を開始するこずです。 これは、゚ンドナヌザヌの芳点からは実行可胜ではありたせん。

修正を統合する新しいリリヌスのETAはありたすか

ほんの数時間で。 :)

固定された問題を参照しおください。

pip 19.0.2がリリヌスされ、この問題が修正されたした。

--no-use-pep517を䜿甚しおいる堎合でも、最新バヌゞョンのpipでpyinstallerをむンストヌルできたせん

pip install pyinstaller --no-cache-dir --no-use-pep517
Collecting pyinstaller
  Downloading https://files.pythonhosted.org/packages/03/32/0e0de593f129bf1d1e77eed562496d154ef4460fd5cecfd78612ef39a0cc/PyInstaller-3.4.tar.gz (3.5MB)
     |████████████████████████████████| 3.5MB 273kB/s
  Installing build dependencies ... done
    ERROR: Complete output from command python setup.py egg_info:
    ERROR: Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\Raffaele\AppData\Local\Temp\pip-install-5e9w2p2c\pyinstaller\setup.py", line 20, in <module>
        from PyInstaller import __version__ as version, HOMEPATH, PLATFORM
    ModuleNotFoundError: No module named 'PyInstaller'
    ----------------------------------------
ERROR: Command "python setup.py egg_info" failed with error code 1 in C:\Users\Raffaele\AppData\Local\Temp\pip-install-5e9w2p2c\pyinstaller\

このスレッドは、閉じられた埌に最近のアクティビティがないため、自動的にロックされおいたす。 関連するバグに぀いおは、新しい問題を開いおください。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡