python version 2.7
とpip version is 1.5.6
を使用しています。
Setup.pyのgitリポジトリがインストールされているように、URLから追加のライブラリをインストールしたいと思います。
install_requires
のsetup.py
パラメーターにエキストラを入れていました。つまり、私のライブラリには追加のライブラリが必要であり、それらもインストールする必要があります。
...
install_requires=[
"Django",
....
],
...
ただし、gitreposなどのURLはinstall_requires
のsetup.py
の有効な文字列ではありません。 githubからライブラリをインストールしたいとします。その問題について検索したところ、dependency_links
のsetup.py
にライブラリを配置できるものが見つかりました。しかし、それでも機能しません。これが私の依存関係リンクの定義です。
dependency_links=[
"https://github.com/.../tarball/master/#Egg=1.0.0",
"https://github.com/.../tarball/master#Egg=0.9.3",
],
リンクは有効です。これらのURLを使用してインターネットブラウザからダウンロードできます。これらの追加のライブラリは、私の設定ではまだインストールされていません。また、--process-dependency-links
パラメーターを試してpipを強制しました。しかし、結果は同じです。ピッピング時にエラーは発生しません。
インストール後、pip freeze
にライブラリが表示されません。結果はdependency_links
になります。
setup.py
インストールでダウンロードできるようにするにはどうすればよいですか?
これが私の完全なsetup.py
です
from setuptools import setup
try:
long_description = open('README.md').read()
except IOError:
long_description = ''
setup(
name='esef-sso',
version='1.0.0.0',
description='',
url='https://github.com/egemsoft/esef-sso.git',
keywords=["Django", "egemsoft", "sso", "esefsso"],
install_requires=[
"Django",
"webservices",
"requests",
"esef-auth==1.0.0.0",
"Django-simple-sso==0.9.3"
],
dependency_links=[
"https://github.com/egemsoft/esef-auth/tarball/master/#Egg=1.0.0.0",
"https://github.com/egemsoft/Django-simple-sso/tarball/master#Egg=0.9.3",
],
packages=[
'esef_sso_client',
'esef_sso_client.models',
'esef_sso_server',
'esef_sso_server.models',
],
include_package_data=True,
Zip_safe=False,
platforms=['any'],
)
これがpipログです。
Downloading/unpacking esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Getting page https://pypi.python.org/simple/esef-auth/
Could not fetch URL https://pypi.python.org/simple/esef-auth/: 404 Client Error: Not Found
Will skip URL https://pypi.python.org/simple/esef-auth/ when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Getting page https://pypi.python.org/simple/
URLs to search for versions for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0):
* https://pypi.python.org/simple/esef-auth/1.0.0.0
* https://pypi.python.org/simple/esef-auth/
Getting page https://pypi.python.org/simple/esef-auth/1.0.0.0
Could not fetch URL https://pypi.python.org/simple/esef-auth/1.0.0.0: 404 Client Error: Not Found
Will skip URL https://pypi.python.org/simple/esef-auth/1.0.0.0 when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Getting page https://pypi.python.org/simple/esef-auth/
Could not fetch URL https://pypi.python.org/simple/esef-auth/: 404 Client Error: Not Found
Will skip URL https://pypi.python.org/simple/esef-auth/ when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Could not find any downloads that satisfy the requirement esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Cleaning up...
Removing temporary dir /Users/ahmetdal/.virtualenvs/esef-sso-example/build...
No distributions at all found for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Exception information:
Traceback (most recent call last):
File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args)
File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/commands/install.py", line 278, in run
requirement_set.prepare_files(Finder, force_root_Egg_info=self.bundle, bundle=self.bundle)
File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/req.py", line 1177, in prepare_files
url = Finder.find_requirement(req_to_install, upgrade=self.upgrade)
File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/index.py", line 277, in find_requirement
raise DistributionNotFound('No distributions at all found for %s' % req)
DistributionNotFound: No distributions at all found for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
dependency_links
のソースを使用していないようです。
install_requires
にも依存関係が含まれていることを確認する必要があります。
これが例ですsetup.py
#!/usr/bin/env python
from setuptools import setup
setup(
name='foo',
version='0.0.1',
install_requires=[
'balog==0.0.7'
],
dependency_links=[
'https://github.com/balanced/balog/tarball/master#Egg=balog-0.0.7'
]
)
例setup.py
の問題は次のとおりです。
設定した依存関係リンクにEgg名がありません。
あなたが持っている
https://github.com/egemsoft/esef-auth/tarball/master/#Egg=1.0.0.0
あなたが必要
https://github.com/egemsoft/esef-auth/tarball/master/#Egg=esef-auth-1.0.0.0
Pipは、しばらく前にdependency_linksのサポートを削除しました。 dependency_linksをサポートするpipの最新バージョンは1.3.1です 、それをインストールするには
pip install pip==1.3.1
依存関係リンクはその時点で機能するはずです。依存関係は常にpipの最後の手段であることに注意してください。同じ名前のパッケージがpypiに存在する場合、それはあなたのものよりも選択されます。
注 https://github.com/pypa/pip/pull/1955 dependency_linksの許可を開始しているようですが、pipはそれを保持していますが、新しいバージョンのピップ。
[〜#〜] edit [〜#〜]:pip 7の時点で、彼らはdepリンクを再考し、有効にしていますが、非推奨の通知を削除しませんでした。議論から、彼らはここにとどまっているようです。 pip> = 7の場合、インストール方法は次のとおりです。
pip install -e . --process-dependency-links --allow-all-external
または、以下をpip.confに追加します。例: /etc/pip.conf
[install]
process-dependency-links = yes
allow-all-external = yes
trusted-Host =
bitbucket.org
github.com
[〜#〜]編集[〜#〜]
私が学んだ秘訣は、バージョン番号を非常に高いものに上げて、pipが非依存リンクバージョンを優先しないようにすることです(それが必要な場合)。上記の例から、依存関係リンクを次のようにします。
"https://github.com/egemsoft/Django-simple-sso/tarball/master#Egg=999.0.0",
また、バージョンが例のように見えるか、日付バージョンであることを確認してください。他のバージョン管理では、pipは開発バージョンであると見なし、インストールしません。
--process-dependency-links
を有効にするためのdependency_links
オプションは Pip 19.0で削除されました でした。
代わりに、 PEP 508 URLを使用して依存関係を指定できます。これは Pip 18.1以降でサポートされています です。 setup.py
からの抜粋の例を次に示します。
install_requires=[
"numpy",
"package1 @ git+https://github.com/user1/package1",
"package2 @ git+https://github.com/user2/package2@branch1",
],
Pipは、PyPIからのこのような依存関係を持つパッケージのインストールをサポートしていないことに注意してください PyPIにアップロードすることはできなくなります(Pip 18.1のニュースエントリを参照) 。
パッケージの依存関係の1つとして形を整えて使用したいという同様の状況に直面しました。ただし、Shapelyには、Windowsを使用している場合は、 http://www.lfd.uci.edu/~gohlke/pythonlibs/ の.whlファイルを使用する必要があるという警告があります。それ以外の場合は、Cコンパイラをインストールする必要があります。これは私が望まないことです。他の多くのものをインストールする代わりに、ユーザーに単にpip install mypackage
を使用してもらいたいです。
そして、あなたがdependency_links
で典型的なセットアップをしているなら
setup(
name = 'streettraffic',
packages = find_packages(), # this must be the same as the name above
version = '0.1',
description = 'A random test lib',
author = 'Costa Huang',
author_email = '[email protected]',
install_requires=['Shapely==1.5.17'],
dependency_links = ['http://www.lfd.uci.edu/~gohlke/pythonlibs/ru4fxw3r/Shapely-1.5.17-cp36-cp36m-win_AMD64.whl']
)
pip install .
を実行すると、Pypiで適切に選択され、Windowsのインストールで問題が発生します。何時間も調査した後、私はこのリンクを見つけました setuptoolsにdependency_linksを使用してmysqlclientをインストールするように強制します そして基本的にfrom setuptools.command.install import install as _install
を使用して手動で形を整えてインストールします。
from setuptools.command.install import install as _install
from setuptools import setup, find_packages
import pip
class install(_install):
def run(self):
_install.do_Egg_install(self)
# just go ahead and do it
pip.main(['install', 'http://localhost:81/Shapely-1.5.17-cp36-cp36m-win_AMD64.whl'])
setup(
name = 'mypackage',
packages = find_packages(), # this must be the same as the name above
version = '0.1',
description = 'A random test lib',
author = 'Costa Huang',
author_email = '[email protected]',
cmdclass={'install': install}
)
そして、スクリプトはうまく機能します。それが役に立てば幸い。