Open happysmash27 opened 4 years ago
I have finally gotten back to this, and the same error still occurs with newer versions as well:
~ % pip3 install --user qrl
Collecting qrl
Using cached qrl-2.0.5.tar.gz (550 kB)
ERROR: Command errored out with exit status 1:
command: /usr/bin/python3.6 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-zoaadj5_/qrl/setup.py'"'"'; __file__='"'"'/tmp/pip-install-zoaadj5_/qrl/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-o6ux7w53
cwd: /tmp/pip-install-zoaadj5_/qrl/
Complete output (10 lines):
running egg_info
creating /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info
writing /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/PKG-INFO
writing dependency_links to /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/dependency_links.txt
writing entry points to /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/entry_points.txt
writing requirements to /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/requires.txt
writing top-level names to /tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/top_level.txt
writing manifest file '/tmp/pip-pip-egg-info-o6ux7w53/qrl.egg-info/SOURCES.txt'
error: [Errno 2] No such file or directory: '': ''
abort: no repository found in '/tmp/pip-install-zoaadj5_/qrl' (.hg not found)!
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
I am going to try cloning the git repository directly and seeing if the output is more useful there.
Much more useful... maybe:
QRL % python setup.py build
running build
running build_py
creating build
creating build/lib
creating build/lib/qrl
copying src/qrl/__init__.py -> build/lib/qrl
copying src/qrl/_version.py -> build/lib/qrl
copying src/qrl/cli.py -> build/lib/qrl
copying src/qrl/grpcProxy.py -> build/lib/qrl
copying src/qrl/main.py -> build/lib/qrl
copying src/qrl/measure.py -> build/lib/qrl
creating build/lib/qrl/core
copying src/qrl/core/AddressState.py -> build/lib/qrl/core
copying src/qrl/core/Block.py -> build/lib/qrl/core
copying src/qrl/core/BlockHeader.py -> build/lib/qrl/core
copying src/qrl/core/BlockMetadata.py -> build/lib/qrl/core
copying src/qrl/core/ChainManager.py -> build/lib/qrl/core
copying src/qrl/core/DifficultyTracker.py -> build/lib/qrl/core
copying src/qrl/core/ESyncState.py -> build/lib/qrl/core
copying src/qrl/core/GenesisBlock.py -> build/lib/qrl/core
copying src/qrl/core/Indexer.py -> build/lib/qrl/core
copying src/qrl/core/LastTransactions.py -> build/lib/qrl/core
copying src/qrl/core/Message.py -> build/lib/qrl/core
copying src/qrl/core/MessageRequest.py -> build/lib/qrl/core
copying src/qrl/core/Miner.py -> build/lib/qrl/core
copying src/qrl/core/MultiSigAddressState.py -> build/lib/qrl/core
copying src/qrl/core/OptimizedAddressState.py -> build/lib/qrl/core
copying src/qrl/core/OutgoingMessage.py -> build/lib/qrl/core
copying src/qrl/core/PaginatedBitfield.py -> build/lib/qrl/core
copying src/qrl/core/PaginatedData.py -> build/lib/qrl/core
copying src/qrl/core/PoWValidator.py -> build/lib/qrl/core
copying src/qrl/core/ProposalRecord.py -> build/lib/qrl/core
copying src/qrl/core/Singleton.py -> build/lib/qrl/core
copying src/qrl/core/State.py -> build/lib/qrl/core
copying src/qrl/core/StateContainer.py -> build/lib/qrl/core
copying src/qrl/core/StateMigration.py -> build/lib/qrl/core
copying src/qrl/core/TokenList.py -> build/lib/qrl/core
copying src/qrl/core/TokenMetadata.py -> build/lib/qrl/core
copying src/qrl/core/TransactionInfo.py -> build/lib/qrl/core
copying src/qrl/core/TransactionMetadata.py -> build/lib/qrl/core
copying src/qrl/core/TransactionPool.py -> build/lib/qrl/core
copying src/qrl/core/VoteStats.py -> build/lib/qrl/core
copying src/qrl/core/Wallet.py -> build/lib/qrl/core
copying src/qrl/core/__init__.py -> build/lib/qrl/core
copying src/qrl/core/config.py -> build/lib/qrl/core
copying src/qrl/core/formulas.py -> build/lib/qrl/core
copying src/qrl/core/messagereceipt.py -> build/lib/qrl/core
copying src/qrl/core/node.py -> build/lib/qrl/core
copying src/qrl/core/qrlnode.py -> build/lib/qrl/core
creating build/lib/qrl/crypto
copying src/qrl/crypto/AESHelper.py -> build/lib/qrl/crypto
copying src/qrl/crypto/QRandomX.py -> build/lib/qrl/crypto
copying src/qrl/crypto/Qryptonight.py -> build/lib/qrl/crypto
copying src/qrl/crypto/Qryptonight7.py -> build/lib/qrl/crypto
copying src/qrl/crypto/__init__.py -> build/lib/qrl/crypto
copying src/qrl/crypto/doctest_data.py -> build/lib/qrl/crypto
copying src/qrl/crypto/misc.py -> build/lib/qrl/crypto
copying src/qrl/crypto/xmss.py -> build/lib/qrl/crypto
creating build/lib/qrl/generated
copying src/qrl/generated/__init__.py -> build/lib/qrl/generated
copying src/qrl/generated/qrl_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrl_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlbase_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlbase_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrldebug_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrldebug_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrllegacy_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrllegacy_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlmining_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlmining_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlstateinfo_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlstateinfo_pb2_grpc.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlwallet_pb2.py -> build/lib/qrl/generated
copying src/qrl/generated/qrlwallet_pb2_grpc.py -> build/lib/qrl/generated
creating build/lib/qrl/services
copying src/qrl/services/AdminAPIService.py -> build/lib/qrl/services
copying src/qrl/services/BaseService.py -> build/lib/qrl/services
copying src/qrl/services/DebugAPIService.py -> build/lib/qrl/services
copying src/qrl/services/MiningAPIService.py -> build/lib/qrl/services
copying src/qrl/services/PublicAPIService.py -> build/lib/qrl/services
copying src/qrl/services/WalletAPIService.py -> build/lib/qrl/services
copying src/qrl/services/__init__.py -> build/lib/qrl/services
copying src/qrl/services/grpcHelper.py -> build/lib/qrl/services
copying src/qrl/services/services.py -> build/lib/qrl/services
creating build/lib/qrl/tools
copying src/qrl/tools/__init__.py -> build/lib/qrl/tools
copying src/qrl/tools/generate_genesis.py -> build/lib/qrl/tools
copying src/qrl/tools/token_migration_json_converter.py -> build/lib/qrl/tools
creating build/lib/qrl/core/miners
copying src/qrl/core/miners/__init__.py -> build/lib/qrl/core/miners
creating build/lib/qrl/core/misc
copying src/qrl/core/misc/DependencyChecker.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/__init__.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/db.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/expiring_set.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/helper.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/logger.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/logger_twisted.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/ntp.py -> build/lib/qrl/core/misc
copying src/qrl/core/misc/set_logger.py -> build/lib/qrl/core/misc
creating build/lib/qrl/core/notification
copying src/qrl/core/notification/Observable.py -> build/lib/qrl/core/notification
copying src/qrl/core/notification/ObservableEvent.py -> build/lib/qrl/core/notification
copying src/qrl/core/notification/__init__.py -> build/lib/qrl/core/notification
creating build/lib/qrl/core/p2p
copying src/qrl/core/p2p/IPMetadata.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/__init__.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pChainManager.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pObservable.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pObserver.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pPeerManager.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pTxManagement.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pfactory.py -> build/lib/qrl/core/p2p
copying src/qrl/core/p2p/p2pprotocol.py -> build/lib/qrl/core/p2p
creating build/lib/qrl/core/processors
copying src/qrl/core/processors/TxnProcessor.py -> build/lib/qrl/core/processors
copying src/qrl/core/processors/__init__.py -> build/lib/qrl/core/processors
creating build/lib/qrl/core/txs
copying src/qrl/core/txs/CoinBase.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/LatticeTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/MessageTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/SlaveTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/TokenTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/Transaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/TransferTokenTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/TransferTransaction.py -> build/lib/qrl/core/txs
copying src/qrl/core/txs/__init__.py -> build/lib/qrl/core/txs
creating build/lib/qrl/core/miners/qrandomx
copying src/qrl/core/miners/qrandomx/QRXMiner.py -> build/lib/qrl/core/miners/qrandomx
copying src/qrl/core/miners/qrandomx/QRXPoWValidator.py -> build/lib/qrl/core/miners/qrandomx
copying src/qrl/core/miners/qrandomx/__init__.py -> build/lib/qrl/core/miners/qrandomx
creating build/lib/qrl/core/miners/qryptonight7
copying src/qrl/core/miners/qryptonight7/CNv1Miner.py -> build/lib/qrl/core/miners/qryptonight7
copying src/qrl/core/miners/qryptonight7/CNv1PoWValidator.py -> build/lib/qrl/core/miners/qryptonight7
copying src/qrl/core/miners/qryptonight7/__init__.py -> build/lib/qrl/core/miners/qryptonight7
creating build/lib/qrl/core/txs/multisig
copying src/qrl/core/txs/multisig/MultiSigCreate.py -> build/lib/qrl/core/txs/multisig
copying src/qrl/core/txs/multisig/MultiSigSpend.py -> build/lib/qrl/core/txs/multisig
copying src/qrl/core/txs/multisig/MultiSigVote.py -> build/lib/qrl/core/txs/multisig
copying src/qrl/core/txs/multisig/__init__.py -> build/lib/qrl/core/txs/multisig
creating build/lib/qrl/tools/modeling
copying src/qrl/tools/modeling/__init__.py -> build/lib/qrl/tools/modeling
copying src/qrl/tools/modeling/extract_timing.py -> build/lib/qrl/tools/modeling
running egg_info
creating src/qrl.egg-info
writing src/qrl.egg-info/PKG-INFO
writing dependency_links to src/qrl.egg-info/dependency_links.txt
writing entry points to src/qrl.egg-info/entry_points.txt
writing requirements to src/qrl.egg-info/requires.txt
writing top-level names to src/qrl.egg-info/top_level.txt
writing manifest file 'src/qrl.egg-info/SOURCES.txt'
abort: no repository found in '~/Gits/QRL' (.hg not found)!
error: [Errno 2] No such file or directory: '': ''
(Home directory replaced with "~" by me)
So... why is it looking for ".hg", and what is supposed to create it?
Try to run following command inside the QRL repo before building it
hg init
Thank you! Now the error is...
QRL % python setup.py build
running build
running build_py
running egg_info
writing src/qrl.egg-info/PKG-INFO
writing dependency_links to src/qrl.egg-info/dependency_links.txt
writing entry points to src/qrl.egg-info/entry_points.txt
writing requirements to src/qrl.egg-info/requires.txt
writing top-level names to src/qrl.egg-info/top_level.txt
error: [Errno 2] No such file or directory: '': ''
Pretty much the exact same thing, but a bit less verbose. Hmm.
Much more useful when made verbose:
QRL % python setup.py -v build
running build
running build_py
not copying src/qrl/__init__.py (output up-to-date)
not copying src/qrl/_version.py (output up-to-date)
not copying src/qrl/cli.py (output up-to-date)
not copying src/qrl/grpcProxy.py (output up-to-date)
not copying src/qrl/main.py (output up-to-date)
not copying src/qrl/measure.py (output up-to-date)
not copying src/qrl/core/AddressState.py (output up-to-date)
not copying src/qrl/core/Block.py (output up-to-date)
not copying src/qrl/core/BlockHeader.py (output up-to-date)
not copying src/qrl/core/BlockMetadata.py (output up-to-date)
not copying src/qrl/core/ChainManager.py (output up-to-date)
not copying src/qrl/core/DifficultyTracker.py (output up-to-date)
not copying src/qrl/core/ESyncState.py (output up-to-date)
not copying src/qrl/core/GenesisBlock.py (output up-to-date)
not copying src/qrl/core/Indexer.py (output up-to-date)
not copying src/qrl/core/LastTransactions.py (output up-to-date)
not copying src/qrl/core/Message.py (output up-to-date)
not copying src/qrl/core/MessageRequest.py (output up-to-date)
not copying src/qrl/core/Miner.py (output up-to-date)
not copying src/qrl/core/MultiSigAddressState.py (output up-to-date)
not copying src/qrl/core/OptimizedAddressState.py (output up-to-date)
not copying src/qrl/core/OutgoingMessage.py (output up-to-date)
not copying src/qrl/core/PaginatedBitfield.py (output up-to-date)
not copying src/qrl/core/PaginatedData.py (output up-to-date)
not copying src/qrl/core/PoWValidator.py (output up-to-date)
not copying src/qrl/core/ProposalRecord.py (output up-to-date)
not copying src/qrl/core/Singleton.py (output up-to-date)
not copying src/qrl/core/State.py (output up-to-date)
not copying src/qrl/core/StateContainer.py (output up-to-date)
not copying src/qrl/core/StateMigration.py (output up-to-date)
not copying src/qrl/core/TokenList.py (output up-to-date)
not copying src/qrl/core/TokenMetadata.py (output up-to-date)
not copying src/qrl/core/TransactionInfo.py (output up-to-date)
not copying src/qrl/core/TransactionMetadata.py (output up-to-date)
not copying src/qrl/core/TransactionPool.py (output up-to-date)
not copying src/qrl/core/VoteStats.py (output up-to-date)
not copying src/qrl/core/Wallet.py (output up-to-date)
not copying src/qrl/core/__init__.py (output up-to-date)
not copying src/qrl/core/config.py (output up-to-date)
not copying src/qrl/core/formulas.py (output up-to-date)
not copying src/qrl/core/messagereceipt.py (output up-to-date)
not copying src/qrl/core/node.py (output up-to-date)
not copying src/qrl/core/qrlnode.py (output up-to-date)
not copying src/qrl/crypto/AESHelper.py (output up-to-date)
not copying src/qrl/crypto/QRandomX.py (output up-to-date)
not copying src/qrl/crypto/Qryptonight.py (output up-to-date)
not copying src/qrl/crypto/Qryptonight7.py (output up-to-date)
not copying src/qrl/crypto/__init__.py (output up-to-date)
not copying src/qrl/crypto/doctest_data.py (output up-to-date)
not copying src/qrl/crypto/misc.py (output up-to-date)
not copying src/qrl/crypto/xmss.py (output up-to-date)
not copying src/qrl/generated/__init__.py (output up-to-date)
not copying src/qrl/generated/qrl_pb2.py (output up-to-date)
not copying src/qrl/generated/qrl_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrlbase_pb2.py (output up-to-date)
not copying src/qrl/generated/qrlbase_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrldebug_pb2.py (output up-to-date)
not copying src/qrl/generated/qrldebug_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrllegacy_pb2.py (output up-to-date)
not copying src/qrl/generated/qrllegacy_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrlmining_pb2.py (output up-to-date)
not copying src/qrl/generated/qrlmining_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrlstateinfo_pb2.py (output up-to-date)
not copying src/qrl/generated/qrlstateinfo_pb2_grpc.py (output up-to-date)
not copying src/qrl/generated/qrlwallet_pb2.py (output up-to-date)
not copying src/qrl/generated/qrlwallet_pb2_grpc.py (output up-to-date)
not copying src/qrl/services/AdminAPIService.py (output up-to-date)
not copying src/qrl/services/BaseService.py (output up-to-date)
not copying src/qrl/services/DebugAPIService.py (output up-to-date)
not copying src/qrl/services/MiningAPIService.py (output up-to-date)
not copying src/qrl/services/PublicAPIService.py (output up-to-date)
not copying src/qrl/services/WalletAPIService.py (output up-to-date)
not copying src/qrl/services/__init__.py (output up-to-date)
not copying src/qrl/services/grpcHelper.py (output up-to-date)
not copying src/qrl/services/services.py (output up-to-date)
not copying src/qrl/tools/__init__.py (output up-to-date)
not copying src/qrl/tools/generate_genesis.py (output up-to-date)
not copying src/qrl/tools/token_migration_json_converter.py (output up-to-date)
not copying src/qrl/core/miners/__init__.py (output up-to-date)
not copying src/qrl/core/misc/DependencyChecker.py (output up-to-date)
not copying src/qrl/core/misc/__init__.py (output up-to-date)
not copying src/qrl/core/misc/db.py (output up-to-date)
not copying src/qrl/core/misc/expiring_set.py (output up-to-date)
not copying src/qrl/core/misc/helper.py (output up-to-date)
not copying src/qrl/core/misc/logger.py (output up-to-date)
not copying src/qrl/core/misc/logger_twisted.py (output up-to-date)
not copying src/qrl/core/misc/ntp.py (output up-to-date)
not copying src/qrl/core/misc/set_logger.py (output up-to-date)
not copying src/qrl/core/notification/Observable.py (output up-to-date)
not copying src/qrl/core/notification/ObservableEvent.py (output up-to-date)
not copying src/qrl/core/notification/__init__.py (output up-to-date)
not copying src/qrl/core/p2p/IPMetadata.py (output up-to-date)
not copying src/qrl/core/p2p/__init__.py (output up-to-date)
not copying src/qrl/core/p2p/p2pChainManager.py (output up-to-date)
not copying src/qrl/core/p2p/p2pObservable.py (output up-to-date)
not copying src/qrl/core/p2p/p2pObserver.py (output up-to-date)
not copying src/qrl/core/p2p/p2pPeerManager.py (output up-to-date)
not copying src/qrl/core/p2p/p2pTxManagement.py (output up-to-date)
not copying src/qrl/core/p2p/p2pfactory.py (output up-to-date)
not copying src/qrl/core/p2p/p2pprotocol.py (output up-to-date)
not copying src/qrl/core/processors/TxnProcessor.py (output up-to-date)
not copying src/qrl/core/processors/__init__.py (output up-to-date)
not copying src/qrl/core/txs/CoinBase.py (output up-to-date)
not copying src/qrl/core/txs/LatticeTransaction.py (output up-to-date)
not copying src/qrl/core/txs/MessageTransaction.py (output up-to-date)
not copying src/qrl/core/txs/SlaveTransaction.py (output up-to-date)
not copying src/qrl/core/txs/TokenTransaction.py (output up-to-date)
not copying src/qrl/core/txs/Transaction.py (output up-to-date)
not copying src/qrl/core/txs/TransferTokenTransaction.py (output up-to-date)
not copying src/qrl/core/txs/TransferTransaction.py (output up-to-date)
not copying src/qrl/core/txs/__init__.py (output up-to-date)
not copying src/qrl/core/miners/qrandomx/QRXMiner.py (output up-to-date)
not copying src/qrl/core/miners/qrandomx/QRXPoWValidator.py (output up-to-date)
not copying src/qrl/core/miners/qrandomx/__init__.py (output up-to-date)
not copying src/qrl/core/miners/qryptonight7/CNv1Miner.py (output up-to-date)
not copying src/qrl/core/miners/qryptonight7/CNv1PoWValidator.py (output up-to-date)
not copying src/qrl/core/miners/qryptonight7/__init__.py (output up-to-date)
not copying src/qrl/core/txs/multisig/MultiSigCreate.py (output up-to-date)
not copying src/qrl/core/txs/multisig/MultiSigSpend.py (output up-to-date)
not copying src/qrl/core/txs/multisig/MultiSigVote.py (output up-to-date)
not copying src/qrl/core/txs/multisig/__init__.py (output up-to-date)
not copying src/qrl/tools/modeling/__init__.py (output up-to-date)
not copying src/qrl/tools/modeling/extract_timing.py (output up-to-date)
running egg_info
writing src/qrl.egg-info/PKG-INFO
writing dependency_links to src/qrl.egg-info/dependency_links.txt
writing entry points to src/qrl.egg-info/entry_points.txt
writing requirements to src/qrl.egg-info/requires.txt
writing top-level names to src/qrl.egg-info/top_level.txt
'license_file' option was not specified
error: [Errno 2] No such file or directory: '': ''
...So maybe it has to do with "license_file"? But now the question is which line of code prints that, and which line of code is asking for the file or directory '': ''
?
setup.py seems to call setuptools to use pyscaffold in some way, but I know pretty much nothing about these tools making it really hard for me to debug. Usually I would just follow the layers of functions until it got to something useful, but everything is so abstracted that I do not know where anything is.
Modifying setup_package to be:
def setup_package():
needs_sphinx = {'build_sphinx', 'upload_docs'}.intersection(sys.argv)
sphinx = ['sphinx'] if needs_sphinx else []
print("Running setup")
try:
print("Trying setup")
pdb.set_trace()
setup(setup_requires=['pyscaffold>=3.0a0,<3.1a0'] + sphinx,
entry_points=entry_points,
version=versioneer.get_version(),
cmdclass=versioneer.get_cmdclass(),
use_pyscaffold=True)
print("End of setup")
except Exception:
print("Exception occured")
pdb.post_mortem()
To use pdb.
Then stepping through the entire setuptools program using:
until 38
n
s
until 153
s
until 148
s
until 966
s
until 985
s
until 135
s
until 313
s
until 985
s
until 1552
s
until 52
s
until 56
s
until 118
s
until 69
s
until 82
s
until 139
s
until 313
s
until 985
s
until 299
s
until 306
s
until 541
s
until 581
s
until 18
(Line numbers will probably change if you have a different version of setuptools than me)
I have finally isolated the file not found error to the function walk_revctrl(dirname='') in /usr/lib/python3.9/site-packages/setuptools/command/sdist.py at this line:
(Pdb) ll
15 def walk_revctrl(dirname=''):
16 """Find all files under revision control"""
17 for ep in pkg_resources.iter_entry_points('setuptools.file_finders'):
18 -> for item in ep.load()(dirname):
19 yield item
So the problem is whatever is calling that function.
That appears to be the following line in /usr/lib/python3.9/site-packages/setuptools/command/egg_info.py
:
(Pdb) ll
577 def add_defaults(self):
578 sdist.add_defaults(self)
579 self.filelist.append(self.template)
580 self.filelist.append(self.manifest)
581 -> rcfiles = list(walk_revctrl())
582 if rcfiles:
583 self.filelist.extend(rcfiles)
584 elif os.path.exists(self.manifest):
585 self.read_manifest()
586
587 if os.path.exists("setup.py"):
588 # setup.py should be included by default, even if it's not
589 # the script called to create the sdist
590 self.filelist.append("setup.py")
591
592 ei_cmd = self.get_finalized_command('egg_info')
593 self.filelist.graft(ei_cmd.egg_info)
Uh huh...
(Pdb) ll
15 -> def walk_revctrl(dirname=''):
16 """Find all files under revision control"""
17 for ep in pkg_resources.iter_entry_points('setuptools.file_finders'):
18 for item in ep.load()(dirname):
19 yield item
(Pdb) until 18
> /usr/lib/python3.9/site-packages/setuptools/command/sdist.py(18)walk_revctrl()
-> for item in ep.load()(dirname):
(Pdb) display ep
display ep: EntryPoint.parse('setuptools_scm = pyscaffold.contrib.setuptools_scm.integration:find_files')
(Pdb) s
--Call--
> /usr/lib/python3.9/site-packages/pkg_resources/__init__.py(2437)load()
-> def load(self, require=True, *args, **kwargs):
(Pdb) ll
2437 -> def load(self, require=True, *args, **kwargs):
2438 """
2439 Require packages for this EntryPoint, then resolve it.
2440 """
2441 if not require or args or kwargs:
2442 warnings.warn(
2443 "Parameters to load are deprecated. Call .resolve and "
2444 ".require separately.",
2445 PkgResourcesDeprecationWarning,
2446 stacklevel=2,
2447 )
2448 if require:
2449 self.require(*args, **kwargs)
2450 return self.resolve()
(Pdb) display ep.load
display ep.load: ** raised NameError: name 'ep' is not defined **
(Pdb) until 2450
> /usr/lib/python3.9/site-packages/pkg_resources/__init__.py(2450)load()
-> return self.resolve()
(Pdb) s
--Call--
> /usr/lib/python3.9/site-packages/pkg_resources/__init__.py(2452)resolve()
-> def resolve(self):
(Pdb) ll
2452 -> def resolve(self):
2453 """
2454 Resolve the entry point from its module and attrs.
2455 """
2456 module = __import__(self.module_name, fromlist=['__name__'], level=0)
2457 try:
2458 return functools.reduce(getattr, self.attrs, module)
2459 except AttributeError as exc:
2460 raise ImportError(str(exc)) from exc
(Pdb) display self.module_name
display self.module_name: 'pyscaffold.contrib.setuptools_scm.integration'
I had made a thread to test if this is a Pyscaffold error and it looks like it may be one indeed? Still not sure yet.
Edit: Actually, it does get beyond self.resolve(). Hmm... I guess I must still step more granularly.
In https://github.com/pyscaffold/pyscaffold/discussions/484, I was recommended to try running the command without the .hg.
In doing this, the process to get to get an error is a bit different. .hg seems to be missing in the find_sources command in egg_info.py(295)run(), run by the egg_info in the build_py class of usr/lib/python3.9/site-packages/setuptools/command/build_py.py. I get there using the following sequence of operations, this time operating on an unmodified setup.py with command python -m pdb setup.py build
, as this is a newly-cloned repository:
until 37
s
until 33
n
s
until 153
s
until 148
s
until 966
s
until 985
s
until 135
s
until 313
s
until 985
s
until 56
s
until 118
s
until 69
s
until 82
s
until 139
s
until 313
s
until 985
s
until 299
s
Upon debugging more, this seems to be an error in yet another invocation of walk_revctrl, in /usr/lib/python3.9/site-packages/setuptools/command/egg_info.py(581)add_defaults():
> /usr/lib/python3.9/site-packages/setuptools/command/egg_info.py(577)add_defaults()
-> def add_defaults(self):
(Pdb) ll
577 -> def add_defaults(self):
578 sdist.add_defaults(self)
579 self.filelist.append(self.template)
580 self.filelist.append(self.manifest)
581 rcfiles = list(walk_revctrl())
582 if rcfiles:
583 self.filelist.extend(rcfiles)
584 elif os.path.exists(self.manifest):
585 self.read_manifest()
586
587 if os.path.exists("setup.py"):
588 # setup.py should be included by default, even if it's not
589 # the script called to create the sdist
590 self.filelist.append("setup.py")
591
592 ei_cmd = self.get_finalized_command('egg_info')
593 self.filelist.graft(ei_cmd.egg_info)
(Pdb) until 581
> /usr/lib/python3.9/site-packages/setuptools/command/egg_info.py(581)add_defaults()
-> rcfiles = list(walk_revctrl())
(Pdb) n
abort: no repository found in '/home/happysmash27/Gits/New/QRL' (.hg not found)
FileNotFoundError: [Errno 2] No such file or directory: ''
Upon going into the function, after the following series of steps:
until 37
s
until 33
n
s
until 153
s
until 148
s
until 966
s
until 985
s
until 135
s
until 313
s
until 985
s
until 56
s
until 118
s
until 69
s
until 82
s
until 139
s
until 313
s
until 985
s
until 299
s
until 306
s
until 541
s
until 581
s
ep.load()(dirname) is successful at returning items until... around versioneer.py? Anyway, rather than manually go through all of these each time, I decided to look at the documentation to see if there is a way to break once a variable is a certain value, and there indeed is. So, my commands to get to the point of this are now:
tbreak /usr/lib/python3.9/site-packages/setuptools/command/sdist.py:18, item=="versioneer.py"
continue
continue
I've done some more debugging, with a fresh repository, and this time making comments to know what it's doing:
break 33
continue
n
//setup command
s
until 153
//runs the build command
//bunch of wrapper functions here
s
until 148
s
until 966
s
until 985
s
until 135
s
until 313
s
//We run command build_py
p command
until 985
s
until 1552
s
//self.build_packages on line 55 might be related
//But the error happens on line 56, build_package_data
//Runs self.build_package_data
until 56
s
//Ooh! Interesting. Trying to run p self.data_files actually triggers the error!
until 118
s
//At this point, pdb puts me into a __getattr__ function with comment "lazily compute data files"
until 69
s
//Now we are in __get_data_files(self)
//It fails on self.analyze_manifest()
until 82
s
//Then it fails on self.run_command('egg_info')
until 139
//Wrapper functions again
s
until 313
s
until 985
s
//Now we are in this other run command, in egg_info.py
//It does all the "writing *****" messages in the for loop. No error here.
//And then it fails in self.find_sources(), line 299
until 299
s
//It does manifest_filename = os.path.join(self.egg_info, "SOURCES.txt")
p os.path.join(self.egg_info, "SOURCES.txt")
//The value of os.path.join(self.egg_info, "SOURCES.txt") is 'src/qrl.egg-info/SOURCES.txt'
//This file is empty.
//This must mean it is filling the file?
//It assigns that to mm.manifest. mm = manifest_maker(self.distribution)
//As expected, the failure point here is mm.run(), line 306
until 306
s
//This function is also in egg_info.py, line 137
//It fails in self.add_defaults()
until 541
s
//And then, it fails in 581: rcfiles = list(walk_revctrl()), which as we know from previous experiments, is the failure point
//The line after it says if rcfiles. This file doesn't even need to exist!
//So the problem is, that it is throwing the error instead of ignoring it?
Describe the bug When installing QRL, it errors out with "No such file or directory" and "no repository found" errors:
To Reproduce Steps to reproduce the behavior:
PATH="/opt/cmake-3.10.3/bin:$PATH" pip3 install --user qrl
.Expected behavior QRL is updated and runs with no errors.
Desktop (please complete the following information):